关于二维数组指针sizeof计算结果的疑问:为何与预期不符?
问题解答
首先得明确int (*p)[4]的本质:这是一个指向包含4个int元素的数组的指针,不是指向单个int的普通指针。
- 关于
sizeof(p):p本身是指针变量,在64位系统里所有指针的大小都是8字节,不管它指向的是单个变量还是数组,所以结果为8完全合理。 - 关于
sizeof(*p):你之前误以为*p是数组的第一个int元素,但实际上*p代表的是p所指向的整个4元素int数组。在常规系统中int占4字节,4个int的总字节数就是4×4=16,所以sizeof(*p)返回16。
举个代码片段帮你区分:
int (*p)[4] = new int[3][4]; // *p 对应第一个完整的4元素数组,也就是 p[0] cout << sizeof(*p) << endl; // 输出16,整个数组的大小 cout << sizeof(p[0][0]) << endl; // 输出4,这才是单个int元素的大小
内容的提问来源于stack exchange,提问作者Santosh kumar
相关产品推荐
相关产品推荐

