C指向结构的双指针

我试图找出一个指向C结构的双指针,无法弄清楚出了什么问题……简单的来源如下:

typedef struct { int member; } mystruct; void myfunc(mystruct **data) { (*data)->member = 1; } void main(int argc, char *argv[]) { mystruct **data; myfunc(data); printf("member = %d\n", (*data)->member); } 

这里有一个类似的问题: 如何使用指向C中结构指针的指针? 关于如何通过双指针修改结构的成员。 解决方案是语法(*data)->member = 1; 这是有道理的。 但是在我的小应用程序中,我在执行该行时收到了seg错误。 我究竟做错了什么?

谢谢

如果要取消引用指针,则需要指向某些内容。 试试这个:

 void main(int argc, char *argv) { mystruct actualThing; mystruct *pointer = &actualThing; mystruct **data = &pointer; myfunc(data); printf("Member: %d", (*data)->member); } 

您收到了段错误,因为您没有分配结构。

data的值是垃圾,因此它指向内存中不属于您的进程的某个位置,或者指向其他位置无法访问。

您需要先分配一个mystruct类型的对象。 以下是您的工作示例: http : //ideone.com/XIdJ8

data未初始化,因此不指向任何合理的内存地址。 此外,没有浮动的mystruct结构,所以甚至没有任何明智的数据可以指向。 对于您的示例,您希望:

  1. 创建一个mystruct
  2. 指向它。
  3. 指向该指针。

如果只需要将双指针传递给库函数,则无需为其创建变量。 你创建一个普通的指针变量,初始化它指向适当的存储(如果函数需要),然后传递指针的地址(从而“动态”创建双指针)。

我从未使用过libusb,因此我将使用标准库函数给出一个示例。 从联机帮助页:

  #include  long int strtol(const char *nptr, char **endptr, int base); 

看起来只是一个双指针。 它实际上是一个模拟传递引用的单指针。 允许函数返回除正常返回值之外的额外信息。 strtol返回一个长整数,但它也可以告诉你字符串内容在什么时候停止看起来像一个数字。

 #include  #include  int main(void) { char *str = "99RED BALLOONS"; char *what; long num; num = strtol(str, &what, 10); printf("Quantity: %ld; Description: %s;\n", num, what); return 0; } 

输出:

 Quantity: 99; Description: RED BALLOONS; 

你传给它一个指针,但指针没有指向任何东西。

这可能更有用:

 void main(int argc, char *argv[]) { mystruct data; mystruct *ptr = &data; myfunc(&ptr); printf("member = %d\n", (*ptr)->member); }