2014-04-09 186 views
0

以下代碼在屏幕上打印「1」。我的問題是關於評論欄。我以爲ptr是第一個元素a [0] [0]的地址,所以* p已經是1的值, 我在哪裏錯了?對於多維表的地址,有人可以提供一些教程嗎?我總是困惑。提前致謝。C程序指針指向多維表

#include<stdio.h> 
void fun(int **p); 

int main() 
{ 
    int a[3][4] = {1, 2, 3, 4, 4, 3, 2, 8, 7, 8, 9, 0}; 
    int *ptr; 
    ptr = &a[0][0]; // *ptr = *&a[0][0]=a[0][0] 
    fun(&ptr); 
    return 0; 
} 
void fun(int **p) 
{ 
    printf("%d\n", **p); 
} 
+0

好像很少有人使用/理解*基址指針*了,那就是,只是「一個」聲明後, int a [3] [4] ... – RobP

+0

你沒有錯。輸出是1,這是你的預期。您正在將指針'ptr'的地址發送到fun()'函數,所以爲了獲得價值,您必須將其解除引用兩次,這就是您所做的。你認爲你錯在哪裏? 'p'是雙指針。 '* p' ='ptr' ='&a [0] [0]',和'** p' ='* ptr' ='*&a [0] [0]'='a [0] [0] '='1' – Vinay

+0

@Vinay我看到我錯了。就像你說的那樣,我發送ptr的地址,這個地址已經被我省略了。謝謝! –

回答

1

指針是保持的另一個變量 存儲器位置的變量所以PTR是指向變量的地址A [0] [0]爲1 一個指針,因爲[3] [4 ] = {1,2,3,4,4,3,2,8,7,8,9,0};

ptr = &a[0][0]; 

哪個是第一行的第一個元素(因爲[] []是一個二維陣列)

fun(&ptr); 

功能樂趣傳遞指針的地址PTR

在功能

void fun(int **p) 

它將地址作爲參數,並且指針p將該地址作爲參數,即;指向指針的指針

p指向ptr的地址,其中ptr指向地址a [0] [0]。因此,預期產出應在1

有關指針和數組的詳細信息,請參考以下鏈接: http://pw1.netcom.com/~tjensen/ptr/pointers.htm