[英]C Double Pointer to Structure
我正在嘗試在 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);
}
這里問了一個類似的問題: How to work with pointer to pointer to pointer to structure in C? 關於如何通過雙指針修改結構的成員。 解決方案是語法(*data)->member = 1;
這是有道理的。 但是在我這里的小應用程序中,我在執行該行時收到一個段錯誤。 我究竟做錯了什么?
謝謝
如果要取消引用指針,則需要指向某些內容。 嘗試這個:
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
結構,因此實際上甚至沒有任何可指向的合理數據。 對於您的示例,您希望:
mystruct
。如果您只需要將雙指針傳遞給庫函數,則無需為其創建變量。 您創建一個普通的指針變量,將其初始化為指向適當的存儲(如果函數需要),然后傳遞指針的地址(從而“動態”創建雙指針)。
我從來沒有使用過 libusb,所以我將舉一個使用標准庫函數的例子。 從聯機幫助頁:
#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
它只是看起來像一個雙指針。 它實際上是一個模擬的通過引用傳遞的單指針。 允許函數返回正常返回值之外的額外信息。 strtol
返回一個長整數,但它也可以告訴您字符串內容在什么時候不再像數字。
#include <stdio.h>
#include <stdlib.h>
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;
myfunc(&data);
printf("member = %d\n", data->member);
}
這在 C++ 中對我有用,不需要指向另一個變量。
你傳遞給它一個指針,但指針沒有指向任何東西。
這可能更有用:
void main(int argc, char *argv[])
{
mystruct data;
mystruct *ptr = &data;
myfunc(&ptr);
printf("member = %d\n", (*ptr)->member);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.