gpt4 book ai didi

C语言数组与传递给函数的数组参数之间的区别

转载 作者:行者123 更新时间:2023-11-30 18:09:56 27 4
gpt4 key购买 nike

两个注释函数都返回完全相同的内存地址。那么,为什么我可以从数组变量(指向第一个元素的指针)获取正确的大小,而我无法从数组指针(数组参数)获取大小,而看起来完全没有区别(完全相同的内存地址):

#include <stdio.h>

void arraySize(int arr[]) {
printf("%p\n", arr); // same memory address
printf("%lu\n", sizeof(arr) / sizeof(arr[0])); // different result
}

int main() {
int a[] = {1,2,3,4,5};
printf("%p\n", a); // same memory address
printf("%lu\n", sizeof(a) / sizeof(a[0])); // different result
arraySize(a);
return 0;
}

最佳答案

在main中,a是一个数组,它是在本地分配的,因此它的大小将始终是元素数量乘以sizeof(int)。然而,当调用函数时,会传递一个指向数组的指针(数组第一个元素的地址)并存储在堆栈中。在函数内部打印时,实际上打印的是指针的大小,而不是数组的大小。在 64 位系统中,指针的大小为 8 字节,在 32 位系统中,指针的大小为 4 字节。

关于C语言数组与传递给函数的数组参数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59920814/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com