指向指针的指针 字符串数组

CSDN问答 2021-12-30 03:03:35 阅读数:457

字符 指针 字符串 指向

img


img

求解释一下图示里p指针的含义,指向的是什么。以及定义函数中*(p+i)的意思。定义函数是如何用冒泡法对5个字符串排序的。




采纳答案:

p指向一个字符串数组,或者说是二维字符数组
*p表示字符串数组的首地址的值,也就是第一个字符串
*(p + i)就表示第i+1个字符串



其他答案2:

p指向数组中的字符串,也就是多个元素
*(p+i)相当于p[][i]
冒泡排序中用的scrtmp函数比较字符串,然后排序


其他答案3:

下面是我的理解,不一定正确,供你参考,如下:

#include <stdio.h>#include <string.h>#define LINEMAX 20int main(){ void sort(char **p); int i; char **p,*pstr[5],str[5][LINEMAX]; for(i=0;i<5;i++){ pstr[i] = str[i]; //把指针数组依次赋值为二维数组str的行指针  } printf("input 5 strings:\n"); for(i=0;i<5;i++){ scanf("%s",pstr[i]); //存放在这五个地址存放一个字符串  } p = pstr; //p赋值为指向这个指针数组  sort(p); printf("\nstrings sorted:\n"); for(i=0;i<5;i++){ printf("%s\n",pstr[i]); } return 0;}void sort (char **p){ int i,j; char * temp; for(i=0;i<5;i++){ for(j=i+1;j<5;j++){ // printf("before change :*(p+i)=%s,*(p+j)=%s\n",*(p+i),*(p+j)); //p+i为下标为i的指针数组的指针,*(p+i)为取下标为i的指针指向的字符串  //p+j为下标为j的指针数组的指针,*(p+j)为取下标为j的指针指向的字符串  //比较这两个指针指向的字符串 ,然后交换他们的值-指针值,把他们存放字符串的地址值交换 //达到排序字符串的目的  if(strcmp(*(p+i),*(p+j))>0){ temp=*(p+i); *(p+i) = *(p+j); *(p+j) = temp; } } }}
版权声明:本文为[CSDN问答]所创,转载请带上原文链接,感谢。 https://ask.csdn.net/questions/7617714