如果我有以下代码行:
int* a[3];
这是否意味着它是一个指向 3 个整数数组中第一项的指针(因此,它的大小为 4 个字节)?或者这是否意味着它是一个由 3 个指针组成的数组(给它一个 12 字节的大小)?
最佳答案
它是C
编程语言中的指向int
数据类型的指针数组。因此,该数组的每个元素都可以保存 int
数据类型变量的地址。
int x=5, y=9, z=8;
int *a[3]; // Declare an array of pointers to int
a[0] = &x;
a[1] = &y;
a[2] = &z;
但是,如下所示的声明将声明一个指向 3 int 数组
的指针。
int (*a)[3];
a
的大小取决于您要为其编译代码的平台。请使用 sizeof
运算符来确定您平台中的大小。
int *a[3];
printf("Size of a: %zu\r\n", sizeof(a));
注意:
要打印 sizeof 运算符的结果,如果您的编译器支持 C99,请使用 %zu ;否则,或者如果您想要最大的可移植性,打印 size_t 值的最佳方法是将其转换为 unsigned long 并使用 %lu。您可以通过 here 阅读相关内容.
关于c - C 中的指针和内存混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41781899/