鱼C论坛

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

sizeof(Array)==4 ; why?

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

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

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

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

  7.         for(i=1;i<3;i++){
  8.                 if(Array[i]>result[0]){
  9.                                 result[0]=Array[i];
  10.                 }
  11.                 else if(Array[i]<result[1]){
  12.                         result[1]=Array[i];       
  13.                 }
  14.                 else if(Array[i]==result[0]||Array[i]==result[1]){
  15.                         fprintf(stdout,"%d==%d & %d==%d ;\n",Array[i],result[0],Array[i],result[1]);
  16.                 }
  17.                 else {
  18.                         fprintf(stderr,"数据项计算错误!\n");
  19.                         exit(0);
  20.                 }
  21.         }       
  22.                 printf("计算结果是:\n\n");
  23.                 for(i=0;i<2;i++){
  24.                         printf("result[%d]=%d \n",i,result[i]);
  25.                 }
  26.                 return result;

  27. }
  28. int main(void){
  29.         int n[3],i;
  30.         int *pm=NULL;
  31.         for(i=0;i<3;i++){
  32.                 printf("Enter num:");
  33.                 scanf("%d",&n[i]);
  34.         }
  35.         pm=M(n);
  36.         printf("\n\nMax num :%d ; Min num :%d ;\n\n",pm[0],pm[1]);
  37.         getchar();
  38.         return 0;
  39. }
复制代码


时间: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 ...
小甲鱼最新课程 -> https://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是个首地址, 并不知道这玩意到底有多少
这就是为什么很多时候以数组名作为首地址穿参的时候 还要额外传递一个数组的长度
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://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个字节
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-20 14:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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