2014-02-21 35 views
0
int a[10]; 
int *p = a; //way 1 
int *p1 = &a[0]; //way 2 

你能告诉我上面两种方法之间的区别吗?C语言:指针赋值的两种方法之间的区别

+3

没有区别...... – sashkello

+0

第一种方式,方法1是_slightly_ wrong:你正在给一个“int指针”分配一个“int数组”。然而它起作用,因为最终结果是一样的 - a和a [0]的地址是相同的。但第二种形式更为正确。 (无论如何,这是一种哲学)。 – linuxfan

回答

5

没有区别。分别将第一个元素的地址分配给指针pp1

在第一种情况下,a会自动转换为第一个元素的地址。在第二种情况下,它明确使用第一个元素的地址。

+0

谢谢!现在我知道我是对的! –

+1

第一种方法不接受数组的地址,并且数组的地址不等于第一个元素的地址。第一种方法使用表达式'a'。在这里,标识符“a”代表阵列。在这个表达式中,但不是所有的表达式,数组**都会自动转换为它的第一个元素的地址。当数组是'sizeof',一元'&',或'_Alignof'的操作数,或者是用于初始化数组的字符串时,不会发生此转换。 –

+0

若要查看数组的地址与第一个元素的地址不相同,请考虑由于类型不匹配,“int * p =&a;'将生成警告消息,并且”&a + 1“指向不同的类型位置(在数组之外)比'&a [0] + 1'(数组的第二个元素)。 –