Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是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 - Fatal编程技术网

是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
    是数据开始的地址
  • *a
    版本创建指向int(或多个int)的指针
    a
    。在本例中,
    a
    引用指向int的指针。与
    a[]
    相比,这是额外的间接寻址
  • 由于
    *a
    是指针,您可以更改其值,而不能更改
    a[]中的
    a
e、 g


第一个是整数数组,第二个是指向整数的指针。所以他们不一样

数组可以用作指针(因为数组会衰减为指向第一个元素的指针),指针也可以用作数组,但对于编译器,它们是不同的

此外,数组的大小在编译时是固定的,它是十个整数的大小,
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};