对new int[]()的理解(转载)

本文探讨了C++中使用new运算符分配数组时的区别,包括未初始化与值初始化的概念。详细解释了如何通过在大小后添加空括号实现数组元素的默认初始化,对比了int*p1=newint[10]与int*p2=newint[10]()的不同效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

new(多个对象)数组
new分配的对象,不管单个对象还是多个对象的分配,都是默认初始化。但可以对数组进行值初始化,方法就是:在大小之后添加一对空括号。

int *p1 = new int[10];    // 10个未初始化int
int *p2 = new int[10](); // 10个值初始化为0的int

int *p2 = new int[10]();申请了空间,而且进行了初始化int *p1 = new int[10];只申请空间,没有进行初始化原因:对于一些结构体,我们可以看到()往往表示构造函数,int是基本类型算初始化吧理由:你可以测试输出两种的值你会发现p1的值未知,而p2清零了

new运算符只是申请分配一个内存空间而已,因为不知道为其分配对象的名称,所以分配之后返回的只是一个指向该对象的指针,并没有初始化,加上一个()后,就相当于调用了默认构造函数,会默认初始化,用0来初始化

手把手教我怎么用这些代码实现java登录与注册package com.myhomework; import java.util.Scanner; /*作者:陈天祥 * 时间:2016.10.13 * 功能:登录系统 */ public class LoginService_1 { public static void main(String[] args) { String []user = new String[2]; int []password = new int[2]; //选择菜单 int selects = selecMenu(); if(selects == 1) { loginIf(user,password); } else { boolean flag = regist(user,password); if(flag) { System.out.println("注册成功!"); int s = selecMenu(); if(s == 1) { loginIf(user,password); } else { regist(user,password); } } } } public static void loginIf(String []user,int []password) { //如果密码匹配则,输出登录成功就返回true,否则输入, //密码或者用户名错误false,请重新输入 boolean flag = login(user,password); if(flag){ System.out.println("登录成功!"); } else { System.out.println("登录失败!"); } } /** */ public static int selecMenu() { System.out.println("1:登录"); System.out.println("2:注册"); Scanner input = new Scanner(System.in); System.out.println("选择菜单:"); int selects = input.nextInt(); return selects; } public static boolean login(String []user,int []password) { Scanner input = new Scanner(System.in); System.out.println("请输入用户名:"); String userName = input.nextLine(); System.out.println("请输入密码:"); int pwd = input.nextInt(); //通过userName数据,找到user下标, int index = -1; for (int i = 0; i < user.length; i++) { if(user[i].equals(userName)) { index = i; } } //然后通过user下标找到password中相应的密码。 if(password[index] == pwd) { return true; } else { System.out.println("用户名或者密码输入错误,请从新输入!"); } return false; } public static boolean regist(String []user,int []password) { for (int i = 0; i < password.length; i++) { Scanner input = new Scanner(System.in); System.out.println("请输入用户名:"); String userName = input.nextLine(); user[i] = userName; System.out.println("请输入密码:"); int pwd = input.nextInt(); password[i] = pwd; } return true; } //數組 // String []user = new String[10]; // int []password = new int[10]; } ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.c
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值