C语言:字符串指针数组

C语言:字符串指针数组

C语言:字符串指针与字符串数组_srhqwe的博客-CSDN博客_c语言字符串指针和字符串数组

这个关于字符串指针的基础讲解,用于潜在了解字符串指针。

C语言:字符串指针数组_第1张图片

创建一个字符串指针:char* p = "hello world";那么char* 类型是必要的,那么我们可以知道char*[]这是char*类型的数组 ,如果加上变量名parr则就是:char * parr[]那么这就是一个数组,char类型的指针数组,里面存放的每个元素是char*,所以从p可以知道,每个元素可以是字符串,那么就是:

char* parr ={"good head","strength body","smooth foot"} ;

这样,parr就是一个字符串指针数组。

数组名=数组民[0]=数组首元素的地址。

那么数组首元素是char* 类型的,char*类型的地址就是char**是二级指针。

C语言:字符串指针数组_第2张图片

例题:

C语言:字符串指针数组_第3张图片

char* a[]是字符串指针数组,数组内每个元素类型是char*;

a是数组首元素的地址,是“work”的地址,而“work”是char*类型的一级指针,所以“work”的地址就是二级指针,所以放到char** pa这样的二级指针内:char** pa = a;

pa++,pa是二级指针,就是跳过一个char*类型的的大小,就是sizeof(char*),也就指向了“at”,

*pa是对pa解引用,得到了char*类型的“at”,这是字符串指针,指向的是首元素的地址,“a”的地址,再用printf通过%s打印(%s打印的是字符串),从"a"开始打印到“\0”时结束

所以结果是:at

再来一题:

C语言:字符串指针数组_第4张图片

c、cp和cpp分别是:一级指针、二级指针和三级指针,吸取上面的经验后,很轻易就就能看出,这是套娃,所以需要画图,来理解它们之间的关系:

C语言:字符串指针数组_第5张图片

有了示意图,就需要看看printf了,发现printf内部有很多操作符,因此这些操作符的优先级就很需要知道了,这里就不提了。下面会说到。

++的优先级比*的优先级高,所以这里会先++cpp。

得到了c+2的地址。

一个*得到了c+2,而c+2是c[2]的地址,两个*就得到了c[2],也就是“POINT”的首元素地址“P”。

通过%s打印就是"POINT"。

++比+优先级高,所以先++cpp,因为前面已经++过cpp了,此时再次++cpp,cpp的位置就到c+1,也就是c+1的地址。

*的优先级比+高,所以*++cpp就得到了c+1这个内容,也就是char* “NEW”的地址,

再--就得到了char* “ENTER”的地址,并且c+1这个地址就变成了c。

再*得到了“ENTER”的首元素地址,“E”的地址。

再+3得到了 “E”的地址。

此时通过%s打印的结果是:“ER”

[]的优先级是最高的,所以要先计算[-2],[-2]相当于*(cpp-2),所以得到了c+3的地址再解引用,得到了c+3这个内容,也就是char* "PORST"的指针。

*得到了char* "PORST"的内容,也就是"PORST"的首元素地址,”P“的地址

+3得到了”S“的地址,

此时通过%s打印的结果是:“ST”

[-1][-1]就相当于*(*(cpp-1)-1),里面一层得到了c+2的内容,也就是char* ”POINT“的指针,外面一层得到了char* ”NEW“的首元素地址,"N"的地址。

+1就得到了”E“的地址。

此时通过%s打印的结果是:“EW”

如果有错 ,希望纠错

你可能感兴趣的:(C语言,C语言题目,c语言,c++,数据结构)