64,282
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
extern char a[];
void printa1()
{
printf("1:-------------\n");
printf("1:a->s:%s\n",a);
printf("1:&a->s:%s\n",&a);
printf("1:a %d\n",a);
printf("1:&a %d\n",&a);
printf("1:sizeof(a) %d\n",sizeof(a));
printf("1:sizeof(&a) %d\n",sizeof(&a));
}
void printa2();
void main()
{
printa1();
printa2();
getchar();
}
char *a = "abc";
void printa2()
{
printf("2:-------------\n");
printf("2:a->s:%s\n",a);
printf("2:&a->s:%s\n",&a);
printf("2:a %d\n",a);
printf("2:&a %d\n",&a);
printf("2:sizeof(a) %d\n",sizeof(a));
printf("2:sizeof(&a) %d\n",sizeof(&a));
}
1:
对int a[5];来说
a
&a
&a[0]
三个的值大大小是一样,但是类型不同
a的类型和&a[0]一样,是 int *
&a的类型是 int(*)[5],
所以 sizeof(&a)=5*sizeof(int)=20;
尽管a的类型是int *,但是有个例外,sizeof(a),此时a代表的是整个数组,因此sizeof(a)是整个数组的大小