数组&字符串(2021.06.25)
数据类型 数组名[元素个数]={值1,值2,值3}
数组下标 数组名[下标]
数组下标是从0开始的到数组元素个数-1
数组名是一个地址常量 指向数组首地址的常量
数组必须预先知道大小 动态数组-》开辟堆空间
数组类型
- 数值数组
int a[10];
- 字符数组
char s[10];
- 指针数组
char *p[10];
- 结构数组
struct Stu boy[10];
二维数组
类型说明符 数组名[常量表达式1][常量表达式2]
初始化 分段赋值 int a[3][4] = {{ 1, 2, 3, 4 },{ 5, 6, 7, 8, },{ 9, 10, 11, 12 }};
数组名为数组首元素地址,二维数组的第0个元素为一维数组
printf("i = %d\n", sizeof(a) / sizeof(a[0]));
printf("j = %d\n", sizeof(a[0]) / sizeof(a[0][0]));
printf("n = %d\n", sizeof(a) / sizeof(a[0][0]));
多维数组
数组类型修饰符 数组名 [n1][n2]…[nn];
字符数组与字符串区别
- C语言中没有字符串这种数据类型,可以通过char的数组来替代;
- 字符串一定是一个char的数组,但char的数组未必是字符串;
- 数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组。
char c1[] = { 'c', ' ', 'p', 'r', 'o', 'g' };
printf("c1 = %s\n", c1);
char c2[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0'};
printf("c2 = %s\n", c2);
char c3[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'};
printf("c3 = %s\n", c3);