大佬教程收集整理的这篇文章主要介绍了c – 指针表示法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
int main() { int a[][4] = { 5,7,5,9,4,6,3,1,2,6 }; int *p; // create an Integer pointer int (*q)[4]; // create a pointer to a four-element Integer array p = (int*)a; // ? q = a; printf("%u %u\n",p,q); p++; q++; printf("%u %u\n",q); return 0; }
但是,请注意,数组a实际上就是我们所说的2D数组.它是一个数组数组.数组a的第一个元素本身就是一个数组:int [4]类型的数组.因此,考虑到上述情况,表达式a在值上下文中使用时,等同于表达式& a [0],它是int(*)[4]类型的指针,并且在概念上指向整个1D数组一个[0].
出于这个原因,尝试做
p = a;
将导致编译器发出诊断消息.将int(*)[4]值赋给int *指针对象是非法的.这些类型不兼容.为了抑制此诊断消息,所讨论的代码使用显式强制转换
p = (int *) a;
这有力地将上述int(*)[4]指针值推入p.在典型的实现中,这保留了原始指针的数值,仅执行概念类型转换.
尝试访问* p的值通常会产生[0] [0]的值,因为数字上整个a的地址与[0]的地址相同,并且与地址相同一个[0] [0].上面的代码利用了这个数字标识,同时使用显式转换来解决类型不兼容问题.
以上是大佬教程为你收集整理的c – 指针表示法全部内容,希望文章能够帮你解决c – 指针表示法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。