这篇博客我大概总结以下几点知识
第一个:一维数组 1)
第二个:二维数组 2)
第三个:数组的相关运算 3)
1) 一维数组的创建和初始化
1.1) 数组创建方式 type_t arr_name [const_n]
(类型) (数组名) (常量值)
例如: int arr [10] ; // [ ]中不能存放变量,要放一个常量才可以
1.2) 数组初始化 char arr [ ] = "abc"; // 这里的字符串里面隐含一个 '\0' sizeof(arr) = 4
char arr [ ] = {'a','b','c'}; //这里的字符后面没有一个 '\0' sizeof(arr) = 3
char arr [ ] = {'a','b','c','\0'}; //这里的字符后面有一个 '\0' sizeof(arr) = 4
1.3) 数组用 [ ] 来访问数组内部元素 arr[0] 表示素组 arr 的第一个元素
1.4) 数组在内存中的存储是“”连续的“”
1.5) 数组名 + 整数 其实就是数组每个元素的地址 arr+i 第i个元素的地址
2) 二维数组的使用
2.1) 数组创建方式 type_t arr_name [const_n] [const_n]
(类型) (数组名) (常量值) (常量值)
例如: int arr [10] [10] ; // [ ]中不能存放变量,要放一个常量才可以
2.2) 数组用 [ ] [ ]来访问数组内部元素 arr[0][0] 表示素组 arr 的第一行的第一个元素
2.3) 数组在内存中的存储是“”连续的“”
3) 数组的相关运算
//一维数组
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)); //4 错了 应该是16 它表示整个数组a的所有元素
printf("%d\n",sizeof(&a+1)); //4
printf("%d\n",sizeof(&a[0])); //4
printf("%d\n",sizeof(&a[0]+1));//4
//字符数组
char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr)); //6
printf("%d\n", sizeof(arr+0)); //4 //是第一个元素的地址
printf("%d\n", sizeof(*arr));//1
printf("%d\n", sizeof(arr[1])); //1
printf("%d\n", sizeof(&arr)); //4
printf("%d\n", sizeof(&arr+1));//4
printf("%d\n", sizeof(&arr[0]+1));//4
printf("%d\n", strlen(arr)); //随机值 从第一个元素开始往后数 没有遇到 '\0'
printf("%d\n", strlen(arr+0)); //随机值 从第一个元素开始往后数 没有遇到 '\0'
printf("%d\n", strlen(*arr)); //错误 字符a没有长度
printf("%d\n", strlen(arr[1])); //错误 字符a没有长度
printf("%d\n", strlen(&arr)); //随机值
printf("%d\n", strlen(&arr+1)); //随机值
printf("%d\n", strlen(&arr[0]+1));//随机值
char arr[] = "abcdef";
printf("%d\n", sizeof(arr)); //7 包含'\0'
printf("%d\n", sizeof(arr+0)); //4
printf("%d\n", sizeof(*arr));// 1
printf("%d\n", sizeof(arr[1])); //1
printf("%d\n", sizeof(&arr)); //4
printf("%d\n", sizeof(&arr+1));//4
printf("%d\n", sizeof(&arr[0]+1));//4
printf("%d\n", strlen(arr));// 6
printf("%d\n", strlen(arr+0)); //6
printf("%d\n", strlen(*arr)); //错误
printf("%d\n", strlen(arr[1])); //错误
printf("%d\n", strlen(&arr)); //4 错 应该是6
printf("%d\n", strlen(&arr+1)); //4 错 随机值
printf("%d\n", strlen(&arr[0]+1));//4 错 应该是5 从第二个元素开始数
char *p = "abcdef";
printf("%d\n", sizeof(p)); //4 变量p的大小是4
printf("%d\n", sizeof(p+1)); //4
printf("%d\n", sizeof(*p)); //1
printf("%d\n", sizeof(p[0])); //1
printf("%d\n", sizeof(&p)); //4
printf("%d\n", sizeof(&p+1)); //4
printf("%d\n", sizeof(&p[0]+1));//4
printf("%d\n", strlen(p)); //6
printf("%d\n", strlen(p+1)); //5
printf("%d\n", strlen(*p)); //错误
printf("%d\n", strlen(p[0])); //错误
printf("%d\n", strlen(&p)); //随机值 很重要
printf("%d\n", strlen(&p+1)); //随机值
printf("%d\n", strlen(&p[0]+1)); //5
//二维数组
int a[3][4] = {0};
printf("%d\n",sizeof(a)); //12*4=48
printf("%d\n",sizeof(a[0][0])); //4
printf("%d\n",sizeof(a[0])); //4*4=16
printf("%d\n",sizeof(a[0]+1)); //4
printf("%d\n",sizeof(a+1)); //4*4=16 错了 应该是 4
printf("%d\n",sizeof(&a[0]+1)); //4
printf("%d\n",sizeof(*a)); //16
printf("%d\n",sizeof(a[3]));//16
sizeof(数组名) 这里的数组名表示整个数组
&数组名 这里的数组名表示整个数组
除了这两种情况 其他的 数组名 都代表 首元素的地址