指针数组的声明问题

发布于 2024-10-30 08:23:31 字数 386 浏览 6 评论 0原文

当我执行此代码时

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

甜心 2024-11-06 08:23:32
  1. int x[5] 是一个 5 个整数的数组
  2. int (*x)[5] 是一个指向 5 个整数的数组的指针
  3. int* x[5 ] 是一个包含 5 个整数指针的数组
  1. int x[5] is an array of 5 ints
  2. int (*x)[5] is a pointer to an array of 5 ints
  3. int* x[5] is an array of 5 pointers to ints
罗罗贝儿 2024-11-06 08:23:32
int (*x)[5];

声明一个指向数组的指针。

从问题标题来看,您可能需要

int* x[5];

改为声明一个指针数组。

int x[5];

声明一个普通的 int 旧数组。

int (*x)[5];

declares a pointer to an array.

From the question title, you probably want

int* x[5];

instead, which declares an array of pointers.

int x[5];

declares a plain old array of ints.

花开雨落又逢春i 2024-11-06 08:23:32
int x[5];

声明一个包含五个 int 的数组。

int (*x)[5];

声明一个指向 5 个 int 数组的指针。

您可能会发现 cdecl.org 很有用。

int x[5];

declares an array of five ints.

int (*x)[5];

declares a pointer to an array of 5 ints.

You might find cdecl.org useful.

南风起 2024-11-06 08:23:31
  • int x[5] 是一个由 5 个整数组成的数组
  • int (*x)[5] 是一个指向一个由 5 个整数组成的数组

当当你增加一个指针时,你会增加所指向类型的大小。因此,x+1x5*sizeof(int) 字节 - 给出 8048370 和 < code>8048384 十六进制值,相差 0x14 或 20。

&x 是指向指针的指针 - 因此,当您递增它时,您会添加 sizeof(apointer) 字节 - 这给出了 bf9b08b4bf9b08b8 十六进制值,相差 4。

  • int x[5] is an array of 5 integers
  • int (*x)[5] is a pointer to an array of 5 integers

When you increment a pointer, you increment by the size of the pointed to type. x+1 is therefore 5*sizeof(int) bytes larger than just x - giving the 8048370 and 8048384 hex values with a difference of 0x14, or 20.

&x is a pointer to a pointer - so when you increment it you add sizeof(a pointer) bytes - this gives the bf9b08b4 and bf9b08b8 hex values, with a difference of 4.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文