(1)指针操作 一维 字符数组
1. 字符型数组 --- 存放字符串的
char s[] = "hello"
//s数组名代表数组首元素的地址 &s[0]
--->地址的类型 char *
注意:
char s[] = "hello"; //s的空间开在 栈上
char *s1 = "hello"; //s1的空间开在栈上,但是s1指向的"字符串常量"
//存放"字符串常量区"
*s1 = *s1 - 32; //报错,原因是 s1 指向的数据是在 字符串常量区
//常量区的数据不能修改
const int a = 10; //a成了只读变量
const char * s1 = "hello"; //表示 将 *s1 限定为只读
//如果,不希望修改 *s1 的数据
//一般 建议加上const
char * const s1 = "hello"; //const 离谁近,就是限定谁的
char const *s1 = "hello"; //此时 还是 *s1 不能被修改
char const * const s1 = "hello"; // *s1 和 s1 本身都不能被修改
总结:
1.const 离谁近,就限定谁
2.const 修饰的变量,为只读变量 //变量还是变量 只是成了只读的
(2)指针 操作 二维数组
int a[3][4] = {1,2,3,4,5,6,7,8,9};
a 还是首元素的地址
int[4] a[3]; //a数组名 -- &a[0]
a<=>&a[0] a[0] //数据类型 int[4]
&a[0] //int[4] * 指针类型
//标准C语法: int (*)[4]
定义变量:
int (*p)[4]; //数组指针
//基类型 int[4]这种类型 ---数组类型
*p //等价与 a[0]
*(*(p+0)+0) <=> a[0][0] *(*(p+i)+j) <=> a[i][j]
(3)指针操作字符型二维数组
char s[5][10] = {"hello","world","china"}; //二维字符型数组
char *s[ ] = {"hello","world","china"}; //指针的数组 --- 指针数组
char(*p)[10] = s;