gpt4 book ai didi

c中通过指针计算数组长度,答案是错误的

转载 作者:行者123 更新时间:2023-11-30 17:03:04 25 4
gpt4 key购买 nike

#include <stdio.h>
int a[3] = {1,2,3};

void cal(int* item){
printf("Length(inside) is %lu\n", sizeof(item)/sizeof(item[0]));
}

int main(){
printf("Length(outside) is %lu\n", sizeof(a)/sizeof(int));
cal(a);
}

上面的代码得出的结果是

Length(outside) is 3
Length(inside) is 2

但是,这是错误的,因为它们都应该是3,我的代码有什么问题吗?

最佳答案

首先,您应该使用 %zu 格式说明符来打印结果。

其次,当作为参数传递给函数时,数组名称会衰减为指向第一个元素的指针,因此 sizeof(item) 将无法按预期工作。

基本上,您正在做的是 sizeof (int *)/sizeof (int) 并且在您的环境中,很可能一个指针占用 8 个字节,一个 int 需要 4,所以你会得到这个结果。

关于c中通过指针计算数组长度,答案是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36288739/

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