普通数组
数组本身是一个指针,数组下标为指针偏移量,所以可以为负数
数组名本质一个只读的指针,指向数组的首地址并且带有数组的长度信息,但是当数组名作为值,赋值给其他指针是会自动转换为一个地址(数组的首地址)
数组与字符串
数组赋值字符串有两种方式:
//在初始化的时候把字符串赋值给数组
char a[6] = "hello";
//在初始化之后想要把字符串赋值给数组,需要用到strcp函数才合法
char a[6];
strcpy(a, "hello");
//此处注意要将结束符放入数组中
char a[6];
char str[] = "hello";
int i;
for (i = 0; i < 5; i++) {
a[i] = str[i];
}
a[i] = '\0'; // 添加空字符作为字符串的结束符
以下为错误示范
char a[6];
a[]="hello"; //在代码初始化之后不能直接将字符串赋值给数组,需要借用strcp或者用for循环一个一个字符赋值给数组
数组与指针
当指针指向数组的时候,指针可以直接当成一个数组名来用,可以直接加下标,例如:
int b[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int *p;
p = b; // 将数组 b 的首地址赋给指针 p
printf("%d\n", p[1]); // 输出结果:2
数组指针
取数组指针指向的数组的值的时候需要两次解引符号‘*’
在一下代码中,p
是一个指向数组的指针,而 *p
是指向数组的第一个元素的指针(即指向数组的首地址),而再次使用 *
对 *p
进行取值操作,即可得到数组的第一个元素的值。
#include <stdio.h>
void main() {
int b[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int (*p)[4];
p = b; // 将数组 b 的首地址赋给指针 p
printf("%d\n", **(++p)); // 输出结果:5
return 0;
}
指针数组
待补充