| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 807 人关注过本帖
标题:求助,为什么数组大小在主函数和子函数里不一样?
只看楼主 加入收藏
铁甲
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2020-10-21
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:1 
求助,为什么数组大小在主函数和子函数里不一样?
程序代码:
#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;
}
搜索更多相关主题的帖子: printf 主函数 int 数组大小 sizeof 
2020-12-13 19:33
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:10 
对于 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编辑过]

2020-12-13 21:08
快速回复:求助,为什么数组大小在主函数和子函数里不一样?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016340 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved