c语言指针用法,c语言学到什么
关于语言学习的趣事_关于指针转换-volcano-博客花园
c语言学习的趣事_关于指针转换我今天在Gmail的小组讨论帖子里看到了这样一个帖子:
[learn-linux-c-cpp]一维数组被转换成数组的指针。
benzhemin@gmail.com张哲
11-10-28
发送到learning-linux。
也请讨论:
#包含stdio.h
int main(void){
int a[10]={1,2,3,4,5,6,7,8,9,10 };
int(* p)[2]=(int(*)[2])a;
printf(%d\n ,* * p);
printf(%d\n ,* *(p 1));
printf(%d\n ,* a);
返回0;
a只是一个指针。为什么先转换成int (*)[2]再转换成二维指针?
事实上,下面的代码也可以被编译和运行。
#包含stdio.h
int main(void){
int a[10]={1,2,3,4,5,6,7,8,9,10 };
int(* p)[2]=(int(*)[2])a;
printf(%d\n ,* * p);
printf(%d\n ,* *(p 1));
printf(%d\n ,* a);
返回0;
stumped int(* p)[2]=(int(*)[2])a;和int (*p)[2]=(int (*)[2])是等价的。这里很明显这位网友混淆了概念,如下所述。
a只是一个指针。为什么先转换成int (*)[2]再转换成二维指针?我们知道在C语言中,数组名是一个常数,也就是常说的const quantity。经过上面的改动,A并没有像int (*)[2]那样变成指针类型,而是保留了下来。
原始属性;只是P是类似int (*)[2]的指针类型,被用户强制指向地址A。也就是说,如果使用指针P进行访问,就可以启动A地址。
10个整数被解释为一个二维数组。
还有如下描述:
stumped int(* p)[2]=(int(*)[2])a;和int (*p)[2]=(int (*)[2])是等价的。上面两个描述是一致的,因为解析的时候:A和A的本质是一样的,都指向内存中的固定区域;因此,这两种转换是等价的。
这里不说了,欢迎园中大侠来探讨这个问题。
以上只是我个人的看法。如有不妥,请拿砖。...
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。