gpt4 book ai didi

c++ - 我在 C 中遇到指针问题

转载 作者:行者123 更新时间:2023-11-30 21:16:03 24 4
gpt4 key购买 nike

我有一个函数,它接受字符串指针的指针foo(char **str)

当我写的时候:

//this code makes error-Segmentation fault (core dumped)
char x[2];
x[0] = 'a';
x[1] = '\0';
foo(&x);

但是当我写

char x[2];
x[0] = 'a';
x[1] = '\0';
char *a = x;
foo(&a); //code works perfectly

谁能解释一下这两个代码片段之间的区别是什么?

最佳答案

在此函数中调用

foo(&x);

参数的类型为 char ( * )[2]也就是说,它是一个指向两个元素的数组的指针。

在此函数中调用

foo(&a);

参数的类型为 char **也就是说,它是一个指向指针的指针。

因此正确的调用取决于相应函数参数的声明方式。:)

由于函数参数的类型为char **那么第二个调用是正确的。没有从类型 char ( * )[2] 进行隐式转换输入char ** ,因此编译器将在第一次函数调用时发出错误。

这两种类型之间的区别在于,应用于第一个指针的解引用运算符 * 会生成 char[2] 类型的数组。当取消引用运算符应用于第二个指针时,会再次产生 char * 类型的指针.

初学者感到困惑的是,对于两个指针,您可以应用下标运算符两次,例如 ptr[i][j]哪里ptr是任一类型的指针,因此它们看起来相似。

关于c++ - 我在 C 中遇到指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40566588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com