一维数组
#include<stdio.h>
int main()
{
int a[] = { 1, 2, 3, 4 };
printf("%d\n", sizeof(a));//16 整个数组所占内存的大小
printf("%d\n", sizeof(a + 0));//4 指向第一个元素的指针所占内存的大小(首元素地址的大小)
printf("%d\n", sizeof(*a));//4 指向数组的指针所占内存的大小
printf("%d\n", sizeof(a + 1));//4 指向第二个元素的指针所占内存的大小(第二个元素地址的大小)
printf("%d\n", sizeof(a[1]));//4 指向第一个元素的指针所占内存的大小(首元素地址的大小)
printf("%d\n", sizeof(&a));//4 指向数组的指针所占内存的大小
printf("%d\n", sizeof(&a + 1));//4 指向a数组的下一个数组的指针所占内存的大小
printf("%d\n", sizeof(&a[0]));//4 指向数组首元素的指针所占内存的大小
printf("%d\n", sizeof(&a[0] + 1));//4 指向数组第二个元素的指针所占内存的大小
printf("%d\n", sizeof(*&a));//16 整个数组所占内存的大小
return 0;
}
二维数组
#include<stdio.h>
int main()
{
int a[3][4] = {0};
printf("%d\n",sizeof(a[0]));//16 二维数组中以a[0]为首地址的一维数组所占内存的大小
printf("%d\n",sizeof(a[0]+0));//4 二维数组中a[0][0]的地址所占内存的大小(指针的大小)
printf("%d\n",sizeof(a[0]+1));//4 二维数组中a[0][1]的地址所占内存的大小(指针的大小)
printf("%d\n",sizeof(&a[0]+1));//4 二维数组中指向以a[1]为首地址的指针所占内存的大小(a[1][0]的地址所占内存的大小)
printf("%d\n",sizeof(*a));//16 二维数组中以a[0]为首地址的一维数组所占内存的大小(*a = *(a+0) = a[0])
printf("%d\n",sizeof(a[3]));//16 二维数组中以a[3]为首地址的一维数组所占内存的大小
printf("%d\n",sizeof(a+1));//4 a[1][0]的首地址所占内存的大小
printf("%d\n",sizeof(a));//48 整个二维数组所占内存的大小
printf("%d\n",sizeof(a[0][0]));//4 数组中首元素的地址所占内存的大小
return 0;
}
字符数组
#include<stdio.h>
#include<string.h>
int main()
{
char name[] = "abcdef";
printf("%d\n", sizeof(name[0]));//1 首元素的大小
printf("%d\n", sizeof(&name));//4 指向name数组的指针所占内存的大小
printf("%d\n", sizeof(*name));//1 指向char型指针所占内存的大小
printf("%d\n", sizeof(&name+1));//4 指向name数组的下一个数组的指针所占内存的大小
printf("%d\n", sizeof(name+1));//4 指向数组第二个元素的指针所占内存的大小
printf("%d\n", sizeof(name));//7 整个数组所占内存的大小,还要加上'\0';
printf("%d\n", strlen(name));//6 strlen 计算字符串的长度,以\0'为字符串结束标记
printf("%d\n", strlen(&name));//6 代表整个数组的地址遇到'\0'停止
printf("%d\n", strlen(&name + 1));// 随机数。(&name + 1)该数组的'\0',无法确定大小
printf("%d\n", strlen(name + 1));//5 代表读取数组从b开始遇到'\0'停止
return 0;
}
//sizeof 计算的则是分配的数组所占的内存空间的大小,不受里面存储的内容影响//strlen 计算字符串的长度,以\0'为字符串结束标记。
指针
#include<stdio.h>
int main()
{
char *p1 = NULL;
short *p2 = NULL;
int *p3 = NULL;
float *p4 = NULL;
double *p5 = NULL;
printf("%d\n",sizeof(char));//1 char类型所占的内存大小
printf("%d\n",sizeof(short));//2 short类型所占的内存大小
printf("%d\n",sizeof(int));//4 int类型所占的内存大小
printf("%d\n",sizeof(long));//4 long类型所占的内存大小
printf("%d\n",sizeof(float));//4 float类型所占的内存大小
printf("%d\n",sizeof(double));//8 double类型所占的内存大小
printf("%d\n",sizeof(char*));//4 char型指针所占内存的大小
printf("%d\n",sizeof(short*));//4 short型指针所占内存的大小
printf("%d\n",sizeof(int*));//4 int型指针所占内存的大小
printf("%d\n",sizeof(long*));//4 long型指针所占内存的大小
printf("%d\n",sizeof(float*));//4 float型指针所占内存的大小
printf("%d\n",sizeof(double*));//4 double型指针所占内存的大小
printf("%d\n",sizeof(*p1));//1 指向char型指针:*p1所占内存的大小
printf("%d\n",sizeof(*p2));//2 指向short型指针:*p2所占内存的大小
printf("%d\n",sizeof(*p3));//4 指向int型指针:*p3所占内存的大小
printf("%d\n",sizeof(*p4));//4 指向float型指针:*p4所占内存的大小
printf("%d\n",sizeof(*p5));//8 指向double型指针:*p5所占内存的大小
return 0;
}
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。