为什么数组传进函数后的sizeof不对了
【摘要】 sizeof(数组)#include<studio.h>int main(void){ int a[]={1,2,3,4,5,6,7,8,9}; int min,max; printf("main sizeof(a[])=%lu\n",sizeof(a)); printf("main a=%p\n",a); minmax(a,sizeof(a)/sizeof(...
sizeof(数组)
#include<studio.h>
int main(void)
{
int a[]={1,2,3,4,5,6,7,8,9};
int min,max;
printf("main sizeof(a[])=%lu\n",sizeof(a));
printf("main a=%p\n",a);
minmax(a,sizeof(a)/sizeof(a[0]),&min,&max);
printf("a[0]=%d\n",a[0]);
printf("%d%d",min,max);
return 0;
}
void minmax(int a[],int len,int *min,int *max)
{
int i;
*min=*max=a[0];
printf(“minmax sizeof(a[])=%lu\n”,sizeof(a));
printf("minmax a=%p\n",a);
a[0]=1000;
for(i=1;i<len;i++){
if(a[i]<*min){
*min=a[i];
}
if(a[i]>max){
*max=a[i];
}
}
}
main里的sizeof是68,minmax里的sizeof是4(4是一个指针的大小或者说一个地址的大小)
printf(“main a=%p\n”,a):看a的地址
结果:main 和 minmax 里面a的是相同地址,即这里的a数组是同一个数组。
综上所述,数组是指针。
- sizeof(a)==sizeof(int *)
- 但是可以用数组的运算符[]进行运算
数组参数 - 以下四种函数原型是等价的
- int sum(int *ar,int n);
- int sum(int *, int);
- int sum(int ar[], int n);
- int sum(int [],int);
数组变量是特殊的指针 - 数组变量本身表达地址
- int a[10];int *p=a;//无需用&取地址
- 但是数组的单元表达的是变量,需要用&取地址
- a==&a[0]
- []运算符可以对数组做,也可以对指针做;
- p[0]<==>a[0]
- *运算符可以对指针做,也可以对数组做
- 数组变量是const的指针,所以不能被赋值
- int a[]<==>int *p const a=…
int *p=&min; printf("*p=%d",*p); printf("p[0]=%d",p[0]);
*p==p[0]
输出值都是2,都是为了取出p所指向的地址存放的数值printf("*a=%d",*a);
输出为1000
int b[]; b=a;
数组之间不能互相赋值,数组是常量指针,被创建后不能被改变。
指针与const
const:不能被修改
指针=指针+指针所指的变量
- 指针是const
- 表示一旦得到了某个变量的地址。不能再指向其他变量
- int * const q=&i;//q只能指向i的地址
- *q=26;//OK//可以对q指向的地址的值进行操作
- q++;//ERROR//但是不能对q进行运算
- 所指是const
- 表示不能通过这个指针去修改那个变量(并不能使得那个变量成为const)
- const int *p=&i;//
- *p =26;//ERROR//不能通过这个指针去修改这个指针指向的变量的值
- i=26;//OK//i可以被修改
- p=&j;//OK//p也可以被修改
q:判断的标志是const在*的前面还是后面
int i;
const int * p1=&i;
int const * p2=&i;
int * const p3=&i;
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)