在這種情況下,我試圖找出正確的語法:
- 將雙指標分配給物件
- 取回那個雙指標的原始地址
這是一個代碼示例:
typedef struct obj2{
obj1 **ptr;
} obj2;
void func(obj1 **dbl)
{
obj2 *tmp = malloc(sizeof(obj2));
printf("before; dbl address is %p\n", (void*)&dbl); // 0x7fff6a1362a0
tmp->ptr = dbl;
// here; trying to print the same address as the first printf
printf("after; dbl address is %p\n", (void*)(tmp->ptr)); // 0x7fff6a136280
}
我究竟做錯了什么?
編輯:這個用例是這樣我可以dbl在代碼庫的其他地方使用,所以這里的最終目標是能夠正確地傳遞一個雙指標。
uj5u.com熱心網友回復:
&dbl是引數的地址,dbl它是一個區域變數。
tmp->ptr = dbl;
tmp->ptr將值賦值給dbl,而不是變數的地址dbl。除非您分配給這些地址,否則這些地址很可能是不同dbl的&dbl(這根本沒有意義)。
uj5u.com熱心網友回復:
在這份宣告中
tmp->ptr = dbl;
您沒有將指標 db1 的地址分配給物件tmp->ptr。您正在分配存盤在指標中的值。
所以這兩個 printf 呼叫輸出不同的值
printf("before; dbl address is %p\n", (void*)&dbl); // 0x7fff6a1362a0
// here; trying to print the same address as the first printf
printf("after; dbl address is %p\n", (void*)(tmp->ptr)); // 0x7fff6a136280
您應該通過以下方式更改 printf 的第一次呼叫
printf("before; dbl address is %p\n", (void*)dbl);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/420554.html
標籤:
