鱼C论坛

 找回密码
 立即注册
查看: 1450|回复: 5

sizeof(Array)==4 ; why?

[复制链接]
发表于 2015-8-1 17:41:05 | 显示全部楼层 |阅读模式
5鱼币
这个代码很简单,就是计算三个数中的最大和最小,用result[0]存储最大,result[1]存储最小;

问题;sizeof(Array)为什么等于4?

插入代码:
#include<stdio.h>
#include<stdlib.h> 
int *M(int Array[]){
        int result[2]={Array[0],Array[0]};
        int i;

        printf("sizeof(Array)=%d ;\n",sizeof(Array));

        for(i=1;i<3;i++){
                if(Array[i]>result[0]){
                                result[0]=Array[i];
                }
                else if(Array[i]<result[1]){
                        result[1]=Array[i];        
                }
                else if(Array[i]==result[0]||Array[i]==result[1]){
                        fprintf(stdout,"%d==%d & %d==%d ;\n",Array[i],result[0],Array[i],result[1]);
                }
                else {
                        fprintf(stderr,"数据项计算错误!\n");
                        exit(0);
                }
        }        
                printf("计算结果是:\n\n"); 
                for(i=0;i<2;i++){
                        printf("result[%d]=%d \n",i,result[i]);
                }
                return result;

}
int main(void){
        int n[3],i;
        int *pm=NULL;
        for(i=0;i<3;i++){
                printf("Enter num:");
                scanf("%d",&n[i]);
        }
        pm=M(n);
        printf("\n\nMax num :%d ; Min num :%d ;\n\n",pm[0],pm[1]);
        getchar();
        return 0;
}

时间:2013年8月1日17:43:41;

最佳答案

查看完整内容

哎呀 楼主 切听我慢慢道来 举个例子 1. struct Num { int num1; int num2; } Num tmp sizeof(tmp)-> 这个东西等于8 因为里面含有两个整数变量, 所以大小是8 如果 Num* tmp sizoef(tep)-> 这个东西就是4 因为他是一个指针变量 哪怕 struct Num { int num1; int num2; .... int num100; } 这个结构体里有100个int整形变量, 但是他的指针类型的大小还是4 楼主切记一句话 指针的zize ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-1 17:41:06 | 显示全部楼层
哎呀 楼主 切听我慢慢道来
举个例子
1.
struct Num
{
    int num1;
    int num2;
}

Num tmp
sizeof(tmp)-> 这个东西等于8 因为里面含有两个整数变量, 所以大小是8

如果
Num* tmp
sizoef(tep)-> 这个东西就是4 因为他是一个指针变量

哪怕
struct Num
{
   int num1;
   int num2;
   ....
   int num100;
}
这个结构体里有100个int整形变量, 但是他的指针类型的大小还是4
楼主切记一句话 指针的zizeof都是4个字节sizeof是计算变量的大小, 不是数组的大小

2. 在数组作为参数传递的过程中 都是作为指针处理
哪怕是Arr[100], 传递过去后 编译器只知道这个东西Arr是个首地址, 并不知道这玩意到底有多少
这就是为什么很多时候以数组名作为首地址穿参的时候 还要额外传递一个数组的长度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-1 20:41:08 | 显示全部楼层
回去看看数组名是什么

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
lark + 1 + 1 谢谢

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-1 22:29:20 | 显示全部楼层
Array是地址,它占4个字节,
int型    Array[0],Array[1],'''''''''是变量它们的大小(sizeof)也是4个字节,char型的Array[0],Array[1大小是一个字节(因为是变量),char 型    Array也是地址,它占4个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-1 22:31:38 | 显示全部楼层
char型的Array[0],Array[1】大小是一个字节(因为是一个字符)    刚才说错

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
lark + 1 + 1 谢谢

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-1 23:04:23 | 显示全部楼层
这么说吧,函数参数array[],在函数体内只能看到这个名字,而看不到元素个数,所以sizeof就会得到地址长度;如果在声明数组的函数体内用sizeof就可以正确输出数组大小~~~

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
lark + 1 + 1 Thanks

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 05:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表