c - C 中的指针和内存混淆

标签 c memory

如果我有以下代码行:

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/

相关文章:

c - 二叉树提取代码

JavaScript 原语 : same memory location, 新的内存位置,还是依赖于引擎?

c - AIX 上 asprintf 的替代或变通方法

c - 需要递归函数的解决方案

c++ - 如何从 C++ 中的堆中删除完整的对象?

c - C 中 strncpy 的内存混淆

linux - Docker容器内存上限

c - 处理内存碎片以模拟动态内存分配

c -\a在C语言中有什么用?

c - 为什么 ROM 字符串没有正确传递?