Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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
C int*和int a[size]之间的区别是什么_C - Fatal编程技术网

C int*和int a[size]之间的区别是什么

C int*和int a[size]之间的区别是什么,c,C,上述两个代码段返回不同的输出 48在第一种情况下 4在第二种情况下 为什么会这样?因为数组不是指针,反之亦然。句号 要详细说明,在int a[12]的情况下;,a是一个数组,它有自己的属性。它是数组类型,因此当您将数组名传递给sizeof运算符时,它会给出数组的大小(在本例中为12整数)乘以整数的大小(4),总共48 OTOH,int*a=malloc12*sizeof*a;更正了格式,a是指针,在上面使用sizeof只会给出指针本身的大小,而不是指针分配的内存大小 引用C-faq,第6章 问:

上述两个代码段返回不同的输出

48在第一种情况下 4在第二种情况下
为什么会这样?

因为数组不是指针,反之亦然。句号

要详细说明,在int a[12]的情况下;,a是一个数组,它有自己的属性。它是数组类型,因此当您将数组名传递给sizeof运算符时,它会给出数组的大小(在本例中为12整数)乘以整数的大小(4),总共48

OTOH,int*a=malloc12*sizeof*a;更正了格式,a是指针,在上面使用sizeof只会给出指针本身的大小,而不是指针分配的内存大小

引用C-faq,第6章

问:但我听说char a[]与char*a完全相同

A:一点也不。您所听到的与函数的形式参数有关。数组不是指针,尽管它们密切相关

数组声明char a[6]要求留出六个字符的空间,以名称a命名。也就是说,有一个名为a的位置,可以容纳六个字符。另一方面,指针声明char*p请求一个包含指针的位置,以名称p命名。这个指针几乎可以指向任何地方:指向任何字符,或指向任何连续字符数组,或不指向任何地方

注:

. 为了使代码健壮和可移植,在分配语句中更喜欢使用变量名本身,而不是硬编码的数据类型。
数组和指针在C语言中是不同的数据类型。当数组用作带有sizeof运算符的操作数时,它给出数组数据类型的大小。但是,当指针与sizeof运算符一起使用时,将返回指针的大小

标准说明C11-6.5.3.4:

sizeof运算符生成其操作数的大小(以字节为单位),可以是表达式或类型的括号名称。大小由操作数的类型决定


在第一种情况下,操作数a的类型为int[12],而在第二种情况下,操作数的类型为int*

您得到的答案不同,因为在这两种情况下,a是不同的

int a[12];-其中a是一个数组

int*a=malloc12*sizeof*a;-在这种情况下,a是一个指针

指针和数组可以在大多数地方互换使用,但这并不意味着它们是相同的东西。正如Sourav所解释的,这两种类型都有不同的属性。

sizeof操作符处理类型的大小。它不必处理传递给它的操作数所包含的内容

int a[12]作为int[12]类型,因此给出大小为484*12

但int*a是一个整数指针,sizeof运算符给出指针的大小,即4

在这些情况下,int a[12]和int*a都不相同。
请注意,sizeof是数组不衰减为指针的少数情况之一。

这段时间感觉非常强大:D加上简短的答案,但我相信这个问题可能是重复的。@非常感谢。但愿所有人都能理解这段时间的价值@SouravGhosh a[i]与*a+i仪式相同吗?那么,为什么它们是不同的数据类型呢抱歉,但是一个解释数组和指针的链接会很有用help@AAB我想你把重点弄错了。这两种表示都会给出相同的结果,但这里我们讨论的是类型。我知道它们是独立的数据类型,但是当一个操作在内部完成时,[I]会转换成*a+I吗?那么,这里到底发生了什么,你能投一些光吗?做一个合适的复制品吗?对“[c]数组指针”的搜索会产生大约33000个条目,这对搜索来说有点痛苦。
Case I: 
   int a[12];
   printf("%d",sizeof(a));

Case II:
    int *a = (int *)malloc(12*sizeof(int));
    printf("%d",sizeof(a));