(1)一维数组
int main()//sizeof()计算变量所占空间大小
{
int a[] = { 1, 2, 3, 4 };
printf("%d\n", sizeof(a));//a单独出现在sizeof内部,表示整个数组,所以结果为16
printf("%d\n", sizeof(a+0));//a不单独出现,表数组首元素地址,加0还是首元素地址4
printf("%d\n", sizeof(*a));//*a表示首元素4
printf("%d\n", sizeof(a+1));//与上面a+0相同,表示第二个元素地址,还是地址,4
printf("%d\n", sizeof(a[1]));//第一个元素,4
printf("%d\n", sizeof(&a));//&a不是单独出现,而是在sizeof内部,不表示整个数组,降为表示整个数组地址4
printf("%d\n", sizeof(&a+1));//&a是整个数组,降为整个数组地址,加1就是跳过整个数组,不过还是地址4
printf("%d\n", sizeof(&a[0]));//是地址就是4
printf("%d\n", sizeof(&a[0]+1));//地址加1还是地址4
system("pause");
return 0;
}
(2)字符数组
int main()//sizeof()计算变量所占空间大小
{
char arr[] = { 'a', 'b','c', 'd','e','f' };
printf("%d\n", sizeof(arr));//arr单独出现在sizeof内部,表示整个数组,所以结果为6个字符
printf("%d\n", sizeof(arr + 0));//arr不单独出现,表数组首元素地址,加0还是首元素地址4
printf("%d\n", sizeof(*arr));//*arr表示首元素a,一个字节为1
printf("%d\n", sizeof(arr[1]));//第2个元素,为1
printf("%d\n", sizeof(&arr));//&arr不是单独出现,而是在sizeof内部,不表示整个数组,降为表示整个数组地址4
printf("%d\n", sizeof(&arr + 1));//&arr是整个数组,降为整个数组地址,加1就是跳过整个数组,不过还是地址4
printf("%d\n", sizeof(&arr[0] + 1));//地址加1还是地址4
system("pause");
return 0;
}
---------------------------------------------------------
int main()//sizeof()计算变量所占空间大小
{
char arr[] = {"abcdef" };
printf("%d\n", sizeof(arr));//arr单独出现在sizeof内部,表示整个数组,所以结果为7,因为还有个\0
printf("%d\n", sizeof(arr + 0));//arr不单独出现,表数组首元素地址,加0还是首元素地址4
printf("%d\n", sizeof(*arr));//*arr表示首元素a,为1
printf("%d\n", sizeof(arr[1]));//第2个元素,为1
printf("%d\n", sizeof(&arr));//&arr不是单独出现,而是在sizeof内部,不表示整个数组,降为表示整个数组地址4
printf("%d\n", sizeof(&arr + 1));//&arr是整个数组,降为整个数组地址,加1就是跳过整个数组,不过还是地址4
printf("%d\n", sizeof(&arr[0] + 1));//地址加1还是地址4
system("pause");
return 0;
}
---------------------------------------------------------
int main()//sizeof()计算变量所占空间大小
{
char *p = "abcdef" ;
printf("%d\n", sizeof(p));//p为指针变量,指a的地址,4
printf("%d\n", sizeof(p + 1));//b的地址,4
printf("%d\n", sizeof(*p));//1个字符,1
printf("%d\n", sizeof(p[1]));//1个字符,1
printf("%d\n", sizeof(&p));//2级指针,4
printf("%d\n", sizeof(&p + 1));//跳到f之后,是个地址,4
printf("%d\n", sizeof(&p[0] + 1));//b的地址,4
system("pause");
return 0;
}
int main()//strlen(地址)从此地址开始向后,遇到\0停止;strlen(元素)就是error
{
char *p = "abcdef" ;
printf("%d\n", strlen(p));//p为指针变量,指a的地址,从a开始向后数,遇到\0停止,6
printf("%d\n", strlen(p + 1));//b的地址,从b开始向后数,5
//printf("%d\n", strlen(*p));//指元素,error
//printf("%d\n", strlen(p[0]));//同上,error
printf("%d\n", strlen(&p));//随机值
printf("%d\n", strlen(&p + 1));//随机值
printf("%d\n", strlen(&p[0] + 1));//从b开始数,5
system("pause");
return 0;
}
(3)二维数组
int main()//strlen(地址)从此地址开始向后,遇到\0停止;strlen(元素)就是error
{
int a[3][4] = { 0 };
printf("%d\n", sizeof(a));//整个数组,3×4×4=48
printf("%d\n", sizeof(a[0][0]));//首元素,4
printf("%d\n", sizeof(a[0]));//首行,16
printf("%d\n", sizeof(a[0]+1));//第一行第2个元素,a[0]没单独放在sizeof中,降为首元素,4
printf("%d\n", sizeof(a+1));//4
printf("%d\n", sizeof(&a[0] + 1));//&a[0]为第一行地址,加1是第2行地址,4
printf("%d\n", sizeof(*a));//首元素地址,是第一行地址,16?
printf("%d\n", sizeof(a[3]));//越界,但承接上面行的类型属性,16
system("pause");
return 0;
}