2011-09-26 110 views
6

下面的指针初始化有什么区别?在c中初始化指针的正确方法是什么?

char array_thing[10]; 

char *char_pointer; 

下面的初始化有什么不同?

1.) char_pointer = array_thing; 

2.) char_pointer = &array_thing 

第二次初始化是否有效?

+3

@ k-ballo不知道你是如何得出结论的,它是功课。 – MGZero

+0

这不是家庭作业..我只是想学习C .. – diesel

+1

@ K-ballo:并不是每个提出基本问题的人都试图通过学术信息学作弊,还有一些人真的想学习。 – orlp

回答

5

第二次初始化无效。您需要使用:

char_pointer = array_thing; 

char_pointer = &array_thing[0]; 

&array_thing是一个指向数组的指针(在这种情况下,类型char (*)[10],你正在寻找一个指向数组的第一个元素

+0

谢谢!这是我的想法。 – diesel

+0

虽然第二次初始化可能仍然有效,但它应该会针对指针类型不兼容提出警告。 – Dmitri

+1

@Dmitri,C中非指向性转换(除去或不包含'void *')的指针转换是非法的。** 6.5.4演员操作符**,段落3:“涉及指针的转换......应通过方法的明确演员。“ –

0

请注意,在您发布的代码中根本没有初始化,也就是说,您应该记住数组会衰减为指针(指向数组中第一个元素的指针)。肯定是有效的,但现在你有(*char)[10]而不是char*

+1

在大多数情况下,数组(也就是数组类型的表达式)衰减到指针* *(如你所暗示的那样)。例外情况是:一元'&'运算符的操作数,一元'sizeof'运算符的操作数以及用于初始化数组对象的初始化程序中的字符串文本(例如'char s [] =“hello”; ')。 –

0

在第一种情况下,你设置char_pointer到array_thing的第一个元素(它的地址,而)。使用指针算术会将您带到其他元素,索引也一样。例如

char_pointer[3] = 'c'; 

相同

char_pointer + = 3; char_pointer ='c';

第二个例子...我不认为这是有效的方式,你这样做。

相关问题