一个求和的算法,为什么数组长度的表示方法失效了?
用数字5,能输出正确结果但用sizeof就不行,用调试看了下总在i,j=2处结束
主函数里printf输出也是正确的
求解。。。 {:10_266:} int sum(int *a) a是一个指针,32位int在这sizeof(a) 是4 $ cat main.c
#include <stdio.h>
void func(int *a) {
printf("func: %lu\n", sizeof(a));
}
int main(void) {
int a[] = {1, 2, 3, 4};
printf("main: %lu\n", sizeof(a));
func(a);
return 0;
}
$ gcc-debug -o main main.c
$ ./main
main: 16
func: 8
$ 本帖最后由 isdkz 于 2022-2-25 19:48 编辑
因为在 sum 函数中传进去的参数是 a 的指针,
a 的指针占了 8 个字节,然后除以 a,a 是一个整数,占4 个字节,
结果是 2,所以在 sum 函数里面 sizeof(a)/sizeof(a) 得出来的是 2。验证代码:
#include<stdio.h>
int sum(int* a);
int main(){
int a[] = {2, 3, 4, 1, -2,};
printf("%d\t", sum(a));
printf("size_a: %d\t", sizeof(a)); # 打印 a 数组占的字节数
printf("size_&a: %d\t", sizeof(&a)); # 打印 a 数组的指针占的字节数
printf("size_a: %d\t", sizeof(a)); # 打印 a 占的字节数
printf("%d", sizeof(a)/sizeof(a));
return 0;
}
int sum(int *a){
int i, j, k, sum1 = 0, maxsum = 0;
for(i = 0; i<sizeof(a)/sizeof(a); i++){
for(j = 0; j<sizeof(a)/sizeof(a); j++,sum1=0){
for(k = i; k<=j; k++){
sum1 = sum1 + a;
}
if(sum1 > maxsum)
maxsum = sum1;
}
}
return maxsum;
}
页:
[1]