摘要:
数组名 arr三种情况:
①sizeof(arr); 求整个数组大小
②&arr :取整个数组的地址,其值表现为数组首元素的地址(二维数组首元素为一行元素)
③其他情况:表示数组首元素的地址。
arr[2]=2[arr]=*(arr+2)
指针:指针存放的是地址,标识一块地址空间,指针让内存访问更方便。
指针(地址)的大小在32位是4字节 ,在64位下是8字节。
#include<stdio.h>
int main()
{
int b[10]={1,2,3,4,5};
printf("%d\n",sizeof(b));//整个数组大小20字节
printf("%d\n",sizeof(b+0));//第一个元素的地址4字节(这里b为数组首元素地址)
printf("%d\n",sizeof(*b)); //b[0],4字节 (这里b为数组首元素地址)
printf("%d\n",sizeof(b+1));//b[1]4字节 (这里b为数组首元素地址)
printf("%d\n",sizeof(*&b));//取整个数组的内容 5*4=20字节
printf("%d\n",sizeof(&b+1));//从数组首地址跳过整个数组后的地址
printf("%d\n",sizeof(&b[0]+1));//第二个元素的地址4字节
int a[3][4] = { 0 };
printf("%d\n", sizeof(a));//sizeof+数组名 表示求整个数组大小48
printf("%d\n", sizeof(a[0][0]));//求第一个元素的大小
printf("%d\n", sizeof(a[0]));//求第一行元素大小为4*4=16个字节
printf("%d\n", sizeof(a[0]+1));//只要数组名不是单独放在sizeof内,也不是&数组名,就代表首元
//素地址,这里为第一行首元素地址,+1后即第二个元素地址4bit
printf("%d\n", sizeof(a+1));//二维数组名表示首元素的地址(即第一行元素地址),+1即第二行地
//址,4字节
printf("%d\n", sizeof(&a[0]+1));//&a[0]为第一行地址,+1即第二行的地址,4字节
printf("%d\n", sizeof(*a));//第一行(数组首元素),四个元素16字节
printf("%d\n", sizeof(a[100]));//a为3*4的数组,a[100]为形如a的数组的一行大小 4*4=16字节
return 0;
}
第一次写,按自己想法写了一些,有问题还请大佬们能指出,感激不尽。