当我执行此代码时
#include<stdio.h>
int main() {
int (*x)[5];
printf("\nx = %u\nx+1 = %u\n&x = %u\n&x + 1 = %u",x,x+1,&x,&x+1);
}
这是C或C ++中的输出:
x = 134513520
x+1 = 134513540
&x = 3221191940
&x + 1 = 3221191944
请解释一下。还有什么区别:
int x[5]
和int (*x)[5]
?
答案 0 :(得分:7)
int x[5]
是一个包含5个整数的数组int (*x)[5]
是指向 5个整数数组的指针增加指针时,会增加指向类型的大小。因此,x+1
5*sizeof(int)
字节大于x
- 提供8048370
和8048384
十六进制值,差值为0x14或20。
&x
是一个指向指针的指针 - 所以当你递增它时你添加sizeof(a pointer)
个字节 - 这会给出bf9b08b4
和bf9b08b8
十六进制值,区别在于4。
答案 1 :(得分:5)
int x[5]
是一个包含5个整数的数组int (*x)[5]
是指向5个整数的数组的指针int* x[5]
是一个包含5个指向int的数组答案 2 :(得分:4)
int (*x)[5];
声明一个指向数组的指针。
从问题标题中,您可能想要
int* x[5];
而是,它声明了一个指针数组。
int x[5];
声明了int
s的简单旧数组。
答案 3 :(得分:3)