lark 发表于 2015-8-1 17:41:05

sizeof(Array)==4 ; why?

这个代码很简单,就是计算三个数中的最大和最小,用result存储最大,result存储最小;

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

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

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

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

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


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

ryxcaixia 发表于 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, 传递过去后 编译器只知道这个东西Arr是个首地址, 并不知道这玩意到底有多少
这就是为什么很多时候以数组名作为首地址穿参的时候 还要额外传递一个数组的长度

牡丹花下死做鬼 发表于 2015-8-1 20:41:08

回去看看数组名是什么

迪拜~战阳 发表于 2015-8-1 22:29:20

Array是地址,它占4个字节,
int型    Array,Array,'''''''''是变量它们的大小(sizeof)也是4个字节,char型的Array,Array[1大小是一个字节(因为是变量),char 型    Array也是地址,它占4个字节

迪拜~战阳 发表于 2015-8-1 22:31:38

char型的Array,Array[1】大小是一个字节(因为是一个字符)    刚才说错

川本姨夫 发表于 2015-8-1 23:04:23

这么说吧,函数参数array[],在函数体内只能看到这个名字,而看不到元素个数,所以sizeof就会得到地址长度;如果在声明数组的函数体内用sizeof就可以正确输出数组大小~~~
页: [1]
查看完整版本: sizeof(Array)==4 ; why?