是int a[10]={0,1,2,3,4,5,6,7,8,9};与c+中的int*a={0,1,2,3,4,5,6,7,8,9}相同+;? 后面的两个在C++中是相同的?
第一:是int a[10]={0,1,2,3,4,5,6,7,8,9};与c+中的int*a={0,1,2,3,4,5,6,7,8,9}相同+;? 后面的两个在C++中是相同的?,c++,arrays,C++,Arrays,第一: int a[10] = {0,1,2,3,4,5,6,7,8,9}; 第二, int *a = {0,1,2,3,4,5,6,7,8,9}; 我认为int*a={0,1,2,3,4,5,6,7,8,9}将失败 您需要为此数组分配内存,然后使用这两个数组进行放置,相同的方法将导致相同的结果 printf("%d\n", a[3]); 区别在于编译器如何看待这两个数组 a[x]版本将a作为对数据的引用a是数据开始的地址 *a版本创建指向int(或多个int)的指针a。
int a[10] = {0,1,2,3,4,5,6,7,8,9};
第二,
int *a = {0,1,2,3,4,5,6,7,8,9};
我认为
int*a={0,1,2,3,4,5,6,7,8,9}
将失败
您需要为此数组分配内存,然后使用这两个数组进行放置,相同的方法将导致相同的结果
printf("%d\n", a[3]);
区别在于编译器如何看待这两个数组
版本将a[x]
作为对数据的引用a
是数据开始的地址a
版本创建指向int(或多个int)的指针*a
。在本例中,a
引用指向int的指针。与a
相比,这是额外的间接寻址a[]
- 由于
是指针,您可以更改其值,而不能更改*a
a[]中的
值a
第一个是整数数组,第二个是指向整数的指针。所以他们不一样 数组可以用作指针(因为数组会衰减为指向第一个元素的指针),指针也可以用作数组,但对于编译器,它们是不同的 此外,数组的大小在编译时是固定的,它是十个整数的大小,
sizeof
将返回40
(对于最常见的32位int
)。指针的大小是指针的大小,而不是指针指向的对象。因此,对指针执行sizeof
操作将返回4
(在32位机器上)或8
(在64位机器上)
另一个也。。。C++没有“文字数组”,所以不能分配给这样的指针。您必须先分配内存,然后分配内存。使用新的C++11标准,只需一步即可完成:
int* a = new int[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
请记住,如果您像上面那样分配内存,还必须释放它:
delete[] a;
a1
是一个数组,因此当一个超出范围的内存被释放时
否则int*a2={0,1,2,3,4,5,6,7,8,9}
a2
是一个指针(我认为你不能这样初始化它),即使你这样做a2=a1
内存仍然是a1“拥有”的。通过使用
sizeof
可以看到a1和a2是不同的类型。a2只是指针的大小,而a1是sizeof(int)*10
int*a={0,1,2,3,4,5,6,7,8,9};不编译…但为什么常量char*pt=“123”;可以compile@jiafu“123”是字符串文字。它是一个左值,意味着您可以获取它的地址,然后将其提供给pt。这就是你的注释中的代码是如何编写第二个例子(它是无效C++)…DietrichEpp添加了初始化的情况(最初我认为问题更多的是关于<代码> A[]之间的差异。和*a
。谢谢你的评论。我们可以在新表达式中调用参数化构造函数吗?例如,我如何使用new
分配std::string数组?newstring[10]{“a”,等等}
?@Koushik是的,这很好。
int *a = { 1, 2, 3}; // <== ERROR
int* a = new int[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
delete[] a;
int a1[10]={0,1,2,3,4,5,6,7,8,9};