我在C中有指针的问题

I am having problems with pointers in C

本文关键字:问题 指针 我在      更新时间:2023-10-16

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

当我写:

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

但是当我写

char x[2];
x[0] = 'a';
x[1] = '';
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是任意一种类型的指针,因此它们看起来很相似。