#include<stdio.h>
#include<malloc.h>
void test(int a[],intn)
{
printf("%d\n",sizeof(a));
}
intmain(void)
{
int a[100];
char * p = NULL;
char * ss1 ="0123456789";
char ss2[] ="0123456789";
char ss3[100] ="0123456789";
int ss4[100];
char q1[] = "abcddd";
char q2[] = "a\n";
char *q3 ="a\n";
char *str1 = (char*)malloc(100);
void *str2 = (void*)malloc(100);
test(a,100); // 4字节,数组名进入函数之后退化为指针,指针占四个字节。
printf("%d\n",sizeof(*p)); // 1字节,*p字符型,所以占一个字节
printf("%d\n",sizeof(p)); // 4字节 ,指针占四个字节
printf("%d\n",sizeof(a[100])); // 4字节,数组之外的元素,运行结果为4字节,也可能与后边的存储内容相关
printf("%d\n",sizeof(a)); // 400字节,整个数组,占四百字节
printf("%d\n",sizeof(&a)); // 400字节 ,整个数组,占四百字节
printf("%d\n",sizeof(&a[0])); // 4字节 ,a[0]的地址占四个字节
printf("%d\n",sizeof(ss1)); // 4字节 ,指针占四字节
printf("%d\n",sizeof(ss2)); // 11字节 ,未规定大小的数组,里边存储的字符加\0,所以为11字节
printf("%d\n",sizeof(ss3)); // 100字节 字符数组100字节
printf("%d\n",sizeof(ss4)); // 400字节 整形数组400字节
printf("%d\n",sizeof(q1)); // 7字节 未规定大小的数组,里边存储的字符加\0,所以为7字节
printf("%d\n",sizeof(q2)); // 3字节 未规定大小的数组,里边存储的字符加\0与\n为单字符,所以为3字节
printf("%d\n",sizeof(q3)); // 4字节 指针
printf("%d\n",sizeof(str1)); // 4字节 指针
printf("%d\n",sizeof(str2)); // 4字节 指针
return 0;
}
最后输出结果:
4
1
4
4
400
400
4
4
11
100
400
7
3
4
4
4
请按任意键继续. . .