int (*a)[10];在数组 的指针中a+1为什么是指向下一个a[10]的数组?
*a+1不等于a[0]+1,却等于a[0+1]而a+1不应该是地址+1吗?为什么是指向下一个数组。...
*a+1不等于 a[0]+1,却等于a[0+1]
而a+1不应该是地址+1吗?为什么是指向下一个数组。 展开
而a+1不应该是地址+1吗?为什么是指向下一个数组。 展开
2个回答
展开全部
在汇编中a + 1才是真正的地址+1,而在C/C++中a + 1(假设a是一个指针)要取决于a指向的类型大小,(_Ty*)a + n相当于(char*)a + n * sizeof(_Ty)。比如int* a;,*a的类型为int,则此时a + 1相当于(char*)a + sizeof(int) * 1,也就是说C/C++中指针的加减运算的最小单位是指针指向的类型而不是字节。
在示例中int (*a)[10];,a指向一个数组,*a的类型为int[10],则a + 1相当于a + sizeof(int[10]) * 1,也就是让a指向下一个int[10]。
如果要让指针的最小单位为字节可以把指针强制转换为char*指针或者转换为uint64_t(32位机是uint32_t)再进行运算
在示例中int (*a)[10];,a指向一个数组,*a的类型为int[10],则a + 1相当于a + sizeof(int[10]) * 1,也就是让a指向下一个int[10]。
如果要让指针的最小单位为字节可以把指针强制转换为char*指针或者转换为uint64_t(32位机是uint32_t)再进行运算
追问
指针的加减运算的最小单位是指针指向的类型不是字节。
这个特性是c/c++的原因对吧?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询