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

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

泛泛之交 发布于 2017-05-12 字数 378 浏览 1132 回复 2

下面代码:

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

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2017-07-03 2 楼

char* 是一个指向字符串的指针,char **是一个指向字符串指针的指针。

char *ptr 这样定义不会为字符串分配内存,只会分配一个指向字符的指针。

char arr[10];分配了10个字符串,arr的地址是第一个字符的地址。

 char *str;
str = "1234556";

正如李勇所说,如果你使用一个指针一个常量字符串,如在上面的例子,你应该定义一个指针作为常量, const char *str = "1234556",如果你想试图修改它,是不允许的,你将得到一个compile-time 错误,而不是一个run-time访问冲突错误。

虐人心 2017-05-31 1 楼

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),指向指针的指针