char* 和char** 在c中区别是什么


下面代码:

   
  #include <stdio.h>
  
#include <string.h>

void printLastLetter(char **str)
{
printf("%c\n",*(*str + strlen(*str) - 1));
printf("%c\n",**(str + strlen(*str) - 1));
}

int main()
{
char *str = "1234556";
printLastLetter(&str);
return 1;
}

char*的类型是:“指向一个char类型的指针”
char**的类型是:“指向一个char类型的指针的指针”

定义我明白,对于指针的指针有时候很迷惑。结合上面的例子能给帮忙详细解释一下这两者的区别和应用吗?

c

天天都爱你 12 years, 10 months ago

char*一级指针相当于直接寻址,本身保存就是地址,而char**相当于间接寻址,保存的是地址的地址,读取真实地址时需要先取一次值,就像例子当中的*str操作。二级指针常常用于下面两情况:

一、需要传递一级指针的数组时,如

   
  int main(int argc, char** argv);
 

二、需要对传入的一级指针进行修改时,如:

   
  void alloc_array(int size, char** m)
  
{
*mem = (char*)malloc(size * sizeof(m));
}

参考一下: 谈void changeString(char **s),指向指针的指针

rpgonly answered 12 years, 10 months ago

Your Answer