一维数组和指针结合 int a[ ]={ 1,2,3,4 };
printf("%d\n",sizeof(a)); //这个数组的大小 4元素*4字节 =16字节
printf("%d\n",sizeof(a + 0)); //(a+0)代表是一个地址,我们0号元素的地址 是4/8字节
printf("%d\n",sizeof(*a)); //*a是取元素0的内容, 元素内容占用空间int 是4 字节
printf("%d\n",sizeof(a + 1)); //(a + 1) 代表一个地址,我们1号元素的地址 是4/8 字节
printf("%d\n",sizeof(a[1])); //a[1]下标法取内容, 元素内容占用空间int 是4字节
printf("%d\n",sizeof(&a)); //&a代表一个地址, 是4/8 字节
printf("%#p\n",a); //a数组名是地址,指向数组首地址
printf("%#p\n",&a); 结果相同 //&a 取数组名地址,也是地址,它是指向整行数组
printf("%d\n",sizeof(*&a)); //1.*&a<==>a 2.sizeof(a); 计算整个数组大小4*4=16字节
printf("%d\n",sizeof(&a + 1)); //1. &a拿到整行地址,2. 移动到下一行。本质还是地址
printf("%d\n",sizeof(&a[0])); //1. a[0], 2.&a[0] 对元素取地址,结果是0号元素地址
printf("%d\n",sizeof(&a[0] + 1)); //1.&a[0] 2.往下移动一次。 结果是1号元素地址
二维数组和指针结合 int a[3][4] = { 0 };
int a[3][4] = { 0 };
printf("%d\n", sizeof(a)); //计算数组空间=3*4*4=48 字节
printf("%d\n", sizeof(a[0][0])); //计算元素a[0][0]空间大小是int型4字节
printf("%d\n",sizeof(a[0])); //a[0]行地址, 1行*4元素*4字节=16字节 等同于*(a+0)
printf("%d\n",sizeof(a[0] + 0)); //a[0]行地址,加0就指定了列地址,4/8字节
printf("%d\n",sizeof(a[0] + 1)); //a[0]+1指向本行的下一元素,也就是列地址 4/8字节
printf("%d\n",sizeof(*(a[0] + 1))); //计算a[0][1]元素所占空间 等同于 *(*(a+0)+1)
printf("%d\n",sizeof(a + 1));//a+1是指向下一行地址,本质是地址 4/8
printf("%#p\n",a); //a指向首地址 ,代码具体地址
printf("%#p\n",*a+1); //a+1,指向下一行 ,拿到的是具体地址
//二维数组的数组名,移动一下,相当于移动一行
printf("%d\n",sizeof(*(a + 1)));// *(a+1) 拿到了行地址 计算行地址内的空间
printf("%#p\n",a[0]); // a[0]代表行的起始地址,
printf("%d\n",sizeof(&a[0] + 1));// a[0]代表行起始地址,&a[0]<==>a 转换为行地址 ,移
动一下,实际移动整行,实际是a[1]
printf("%d\n",sizeof(*(&a[0] + 1))); //*(a+1)取整行内容的占用空间
printf("%d\n",sizeof(*a)); //*(a)取整行内容的占用空间
printf("%d\n",sizeof(a[3])); //行的起始地址 4/8
memcpy(arr1,arr2,8 ) 从数组2拷贝八个字节内容到数组1,或者数组内部拷贝
int a_04[10]={-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
print(a_04,10);
//拷贝元素0 、1 到元素 8 、9的位置
//结果:int a_04[10]={-1,-2,3,4,5,6,7,-1,-2}
//memcpy(&a_04[8],&a_04[0],8);
//利用memcpy函数,实现同一数组内,内容的拷贝,不交叉
memmove (arr[0],arr[2],12) 从数组第三个元素往后数12字节内容移动到第0元素
int a_04[10]={-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
拷贝元素0 、1 、2到元素 1 、2 、3的位置 往后拷贝
结果:int a_04[10]={-1,-1,-2,-3,-5,-6,-7,-8,-9,-10}
memmove(a_04+1,a_04,12);
print(a_04,10);