int a[5] = {1,2,3,4,5};
int b[3][4] = {1,2,3,4,5,6,5,1,2,4,5,6};
printf("%d\n",sizeof(a)); // 20
printf("%d\n",sizeof(b)); //48
printf("%d\n",sizeof(b[0])); //16
printf("%d\n",sizeof(b[0][1])); //4
指针的使用场景
指针的作用:传递与偏移
#include <stdio.h>
#include <string.h>
int main()
{
char *p = "xiaozhao";
char c[20] = "xiaohong"; //等价于strcpy(c,"xiaohong")
p = "xiaoyu";
// c = "ximi"; 不可以因为数组名指的数组首元素地址,不可以为左值
// memcpy(p,"xiaoyu",5); 会段错误
// strcpy(p,"xiaozhao"); //不可以,因为内部也是通过数组下标访问
puts(p);
p = c;
strcpy(p,"xiaozhang");
puts(p);
return 0;
}
代码示例
#include <stdio.h>
//void print(int p[][4],int row)
void print(int (*p)[4],int row)
{
int i,j;
for (i = 0; i < row; ++i) {
for (j = 0; j< sizeof(*p)/sizeof(int); ++j) {
// printf("%3d",*(*(p+i)+j));
// printf("%3d",*(p[i]+j));
printf("%3d",p[i][j]);
}
printf("\n");
}
}
// 数组指针 传递 二维数组
int main()
{
int a[3][4]={1,3,5,7,2,4,6,8,9,11,13,15};
int (*p)[4];
p = a;
//printf("%d\n",p[1][2]); 6
//printf("%d\n",*(p[1]+2)); 6
printf("%d\n",*(*(p+1)+2)); //6
print(p,3);
p =(int (*)[4])malloc(16*100); //动态二维数组 分配100个空间每个空间存储4个int*
p[99][3] = 1000;
return 0;
}

