在c中初始化指针的正确方法是什么?
问题描述:
下面的指针初始化有什么区别?在c中初始化指针的正确方法是什么?
char array_thing[10];
char *char_pointer;
下面的初始化有什么不同?
1.) char_pointer = array_thing;
2.) char_pointer = &array_thing
第二次初始化是否有效?
答
第二次初始化无效。您需要使用:
char_pointer = array_thing;
或
char_pointer = &array_thing[0];
&array_thing
是一个指向数组的指针(在这种情况下,类型char (*)[10]
,你正在寻找一个指向数组的第一个元素
答
请注意,在您发布的代码中根本没有初始化,也就是说,您应该记住数组会衰减为指针(指向数组中第一个元素的指针)。肯定是有效的,但现在你有(*char)[10]
而不是char*
。
+1
在大多数情况下,数组(也就是数组类型的表达式)衰减到指针* *(如你所暗示的那样)。例外情况是:一元'&'运算符的操作数,一元'sizeof'运算符的操作数以及用于初始化数组对象的初始化程序中的字符串文本(例如'char s [] =“hello”; ')。 –
答
在第一种情况下,你设置char_pointer到array_thing的第一个元素(它的地址,而)。使用指针算术会将您带到其他元素,索引也一样。例如
char_pointer[3] = 'c';
相同
char_pointer + = 3; char_pointer ='c';
第二个例子...我不认为这是有效的方式,你这样做。
@ k-ballo不知道你是如何得出结论的,它是功课。 – MGZero
这不是家庭作业..我只是想学习C .. – diesel
@ K-ballo:并不是每个提出基本问题的人都试图通过学术信息学作弊,还有一些人真的想学习。 – orlp