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; 哎呀 楼主 切听我慢慢道来
举个例子
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是个首地址, 并不知道这玩意到底有多少
这就是为什么很多时候以数组名作为首地址穿参的时候 还要额外传递一个数组的长度
回去看看数组名是什么 Array是地址,它占4个字节,
int型 Array,Array,'''''''''是变量它们的大小(sizeof)也是4个字节,char型的Array,Array[1大小是一个字节(因为是变量),char 型 Array也是地址,它占4个字节 char型的Array,Array[1】大小是一个字节(因为是一个字符) 刚才说错 这么说吧,函数参数array[],在函数体内只能看到这个名字,而看不到元素个数,所以sizeof就会得到地址长度;如果在声明数组的函数体内用sizeof就可以正确输出数组大小~~~
页:
[1]