注册 登录
编程论坛 C语言论坛

求助,为什么数组大小在主函数和子函数里不一样?

铁甲 发布于 2020-12-13 19:33, 996 次点击
程序代码:
#include<stdio.h>

void access(int a[][3],int row){
    printf("in access_sizeof(a)=%d\n",sizeof(a));
    printf("in access_sizeof(*a)=%d\n",sizeof(*a));
    int rank=(sizeof(a)/sizeof(*a));
    for(int i=0;i<rank;i++){
        for(int j=0;j<row;j++){
            printf("%d\t\t",a[i][j]);
        }
            printf("\n");   
    }        
}

int main(){
    int a[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};   
        printf("in main_sizeof(a)=%d\n",sizeof(a));
        printf("in main_sizeof(*a)=%d\n\n",sizeof(*a));
    access(a,3);
    return 0;
}
1 回复
#2
rjsp2020-12-13 21:08
对于 void access(int a[][3]) 这样的函数
是不是 int a[5][3] 能调用 access( a )
是不是 int a[6][3] 也能调用 access( a ) ?
而 sizeof(a) 又是编译期确定的,那么 access 中 sizeof(a)/sizeof(*a) 是确定为 5,还是 6,还是其它?

之所以 int a[5][3] 能调用 access( a ),int a[6][3] 也能调用 access( a ),两个不同类型能调用,那是因为 void access(int a[][3]) 中的 a 不是个二维数组,而是 int (*a)[3] 这样的一维数组的指针,
void access(int a[][3]) 等同于 void access(int (*a)[3])

另外,sizeof 的类型是 size_t,不是 int,应该用 %zu,不应该用 %d

[此贴子已经被作者于2020-12-13 21:14编辑过]

1