-
字符串与指针
- 一般情况下,除了对字符串数组定义时初始化外,不能直接将字符串赋值给数组。
char s[30]; s = "good news";//错误
- 可以采用strcpy()函数对字符串数组赋值
char s[30]; strcpy(s, "Good News!"); //赋值
-
指针数组赋值
char *p; p = "good news"//给字符型数组赋值
注意:不能通过指针修改p的值,因为该字符串是常量,所有常量都被放在特殊的存储区内无法修该。
- 可以通过指针赋值来实现字符串交换
int a[3]; //指针每次加1,跳转指针对应类型的步数 a+1 地址+4//因为a指向a[0],为int变量 *(&a)+1 效果同上 &a+1 地址+16//因为&a指向整个数组,为4*int变量 a / *(&a) / &a //这三个指针都指向a[0]变量的首地址 //但是&a的含义不同
-
二维数组
-
一个数组名如果不出现在“&”后面 —— 则数组名是 “指向数组首元素的指针”
-
一个数组名如果出现在“&”后面 —— 则数组名返回 “指向数组的指针”
-
int a[3][3];//二维数组 &a 表示指向整个二维数组的指针 a 表示指向第一个小数组a[0]的指针 a[0] 表示指向第一个小数组的第一个元素a[0][0]的指针 a[0][0] 表示a[0][0]地址里的内容 a = &a[0] a[0] = &a[0][0] a[0] = *a a[0][0] = **a
int a[3][3] = {1,2,3,4,5,6,7,8,9}; int (*p)[3];//定义一个指向“包含四个int类型元素的一维数组”的指针 int i,j; p = a;//a和p的基类型相同,都是指向“包含四个int类型元素的一维数组”的指针 //下面“=”表示相当于 *(*(p+i)+j) = a[i][j] = p[i][j] p+i = &a[i] *(p+i) = a[i] *(p+i)+j = &a[i][j]
-
“&” 和“*”
- “&” —— 上升一级
- “*” —— 下降一级
指针指向的是存储单元的内容,即变量,而不是变量的值(*p可以代表变量,对变量进行赋值)
int a[];
int *pointer;
pointer = &c;
pointer+i = a+i = &a[i]
*(pointer+i) = *(a+i) = a[i]
pointer[i] = *(poiner+1)= a[i]