指针数组的声明问题
当我执行此代码时
#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]
之间有什么区别
?
When i execute this code
#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);
}
This is the output in C or C++:
x = 134513520
x+1 = 134513540
&x = 3221191940
&x + 1 = 3221191944
Please explain. Also what is the difference between:
int x[5]
and int (*x)[5]
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
int x[5]
是一个 5 个整数的数组int (*x)[5]
是一个指向 5 个整数的数组的指针int* x[5 ]
是一个包含 5 个整数指针的数组int x[5]
is an array of 5 intsint (*x)[5]
is a pointer to an array of 5 intsint* x[5]
is an array of 5 pointers to ints声明一个指向数组的指针。
从问题标题来看,您可能需要
改为声明一个指针数组。
声明一个普通的
int
旧数组。declares a pointer to an array.
From the question title, you probably want
instead, which declares an array of pointers.
declares a plain old array of
int
s.声明一个包含五个 int 的数组。
声明一个指向 5 个 int 数组的指针。
您可能会发现 cdecl.org 很有用。
declares an array of five ints.
declares a pointer to an array of 5 ints.
You might find cdecl.org useful.
int x[5]
是一个由 5 个整数组成的数组int (*x)[5]
是一个指向一个由 5 个整数组成的数组当当你增加一个指针时,你会增加所指向类型的大小。因此,
x+1
比x
大5*sizeof(int)
字节 - 给出8048370
和 < code>8048384 十六进制值,相差 0x14 或 20。&x
是指向指针的指针 - 因此,当您递增它时,您会添加sizeof(apointer)
字节 - 这给出了bf9b08b4
和bf9b08b8
十六进制值,相差 4。int x[5]
is an array of 5 integersint (*x)[5]
is a pointer to an array of 5 integersWhen you increment a pointer, you increment by the size of the pointed to type.
x+1
is therefore5*sizeof(int)
bytes larger than justx
- giving the8048370
and8048384
hex values with a difference of 0x14, or 20.&x
is a pointer to a pointer - so when you increment it you addsizeof(a pointer)
bytes - this gives thebf9b08b4
andbf9b08b8
hex values, with a difference of 4.