1 指针与字符串
字符串可以看作是一种特殊的数组,所以使用指针处理字符串的时候可以完全按照处理数组的方式来进行
#include
%s占位符的特点就是只要告诉他字符串的首地址,就可以读取整个字符串
但是字符串本身又有着自己的特点:那就是有一个固定的结束符,我们在直接使用字符串常量的时候,可以不用指定字符数组的长度,只要知道了字符串的首地址,就可以知道整个的字符串,所以,我们可以利用一个字符指针(首地址)来代表整个字符串
#include
使用字符数组和字符指针都可以直接代表字符串,后者出现的情况可能还会更多
但是两者并不是完全相同,字符数组表示的字符串可以被修改内容,字符指针表示的数组不能被修改内容
#include
字符串的内容可以被修改
#include
无论是使用 s[]还是*s修改字符串的内容程序都会报错(请自行验证)
主要原因是:字符数组是把字符常量的值,复制到字符数组开辟的空间,而字符指针直接指向了字符串常量的保存地址
在c语言当中,数组的地址和字符串常量的地址不在同一个区域内,字符数组的区域叫做栈区,字符串常量保存的区域叫做常量区,栈区内的数据可以修改,常量区内的数据不能修改,这部分内容之后会有一个专题来讲
2 指针数组
上一章我们已经见过指针数组的声明 int *p[],但是并没有仔细的介绍
指针数组顾名思义,就是把多个指针保存到一个数组当中
也就是说建立了一个数组保存了多个变量的地址
#include
这样做意义不大,更重要的一个用途是我们可以使用指针数组来定义一个长度不相同的数组组成的二维数组
把三个不同长度的数组放到一个指针数组当中,那么就形成了一个逻辑上的二维数组,并且每个数组的长度不用相同
#include
arr[1]找到的是第二个数组的地址 arr[1][2]即是第二个数组的第三个元素
3 字符串组成的数组
上面讲的这种形式对于字符串数组来说特别的有用,我们可能考虑到把一系列的字符串保存到一个数组当中
只要把字符串的首地址存入指针数组就可以了
#include
输出也特别简单,像正常数据数据就可以了