c - 指向数组的指针 - C 编程

标签 c arrays pointers sizeof void

Possible Duplicate:
Sizeof an array in the C programming language?
Why sizeof(param_array) is the size of pointer?

void printSizeOfArray(int a[])
{
    printf("%lu\n", sizeof(a));
}

int main()
{
    int it;
    int a[4] = {0};
    printSizeOfArray(a);

    return 0;
}

当我运行代码时,我得到 8。为什么指向数组的指针是 void 类型的指针?

如果指向数组的指针是 void 类型,为什么,当我写时:

int *it;
int a[4] = {0};
it = a;
printf("%lu\n", sizeof(it));

也可以正常使用吗?我如何用 int 来指向?

另外,为什么第二个打印的是 8 而不是 4?它是指向数组( void* )的指针,而不是 int .

最佳答案

C 中的数组经常“衰减”为仅指向第一个元素的指针。正如您所注意到的,该指针不保留有关数组大小的任何信息。当数组传递给函数时,就会发生这种衰减。

正确的大小只能通过范围内正确的声明来计算。因此,您可以使其适用于函数,但随后数组的大小将成为函数原型(prototype)的一部分,这很少有用:

void printSizeOfArray(int a[3]);

这就是为什么典型的 C 代码总是单独传递大小。

基本上,C 对数组的支持是“弱”的。

关于c - 指向数组的指针 - C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13250728/

相关文章:

c - 如何从函数返回 float 组?

c - 加速二维矩阵读取

字符处理和字符串操作

c - putchar() 没有返回值?

javascript - 对数组中的每个 10 重复操作

c++ - 分配指针时出现段错误

c++ - 无符号字符数组的十进制 ascii 值

arrays - 根据键的值创建多维数组

javascript - 在JavaScript中,为什么不能修改常量String但可以修改常量数组

c - vector 作为参数 C