2012-05-03 64 views
1

今天,我有一個關於考試用C ponters,並有大約兩倍指針的一些問題,其中使用奇怪的指針初始化

*pointer = &variable; 

以下語法,我不知道我是否已經正確,但可有人解釋指針指向哪裏以及變量中的值將如何改變?起初我認爲它會導致sntax錯誤,但在測試中沒有這樣的答案。由於事先

+0

被它也是在同一行中聲明? –

+0

@ MahmoudAl-Qudsi我對此表示懷疑。 – dpp

+0

@dpp這將使它成爲一個簡單的指針,而不是兩個間接級別。對初學者更有意義。 –

回答

0

如果指針被初始化這種方式:

int *pointer; 
int variable = 10; 

pointer = malloc(sizeof(int)); 
*pointer = &variable; 

*pointer = &variable意味着變量的地址被設置爲指針對象的值。由於*pointer正在取消引用,所以您基本上存儲的值不會設置引用。

+0

所以後來例如,如果變量的地址類似於(0x100),則該值將被存儲,並且指針將指向它。我理解正確嗎? –

+0

這就是如果指針在賦值之前正確初始化。 – dpp

+0

嗯,我想我現在明白了,謝謝:) –

0

這裏是你如何可以使用它的一個例子:

int foo = 123; 
int **bar = malloc(sizeof(int *)); 
*bar = &foo; 

現在bar是一個指針的指針到foo。雖然沒有多大意義。

+0

好像聲明似乎必須添加到問題:) – dpp

+0

您的具體示例沒有多大意義,但總體而言,執行'* pointer =&variable'有完全明智的理由。 – jamesdlin

+0

是的,他們都是關於雙指針的問題。現在對我來說有些意義 –

0

pointer是一個指針的指針。 例如,

int var1=42; 
    int* intptr; 
    int** ptr2intPtr; 
    ptr2intptr = &intptr; 
//Syntax in question. 
    *ptr2intptr = &var1; 
//Just like *intptr is same as var1, *ptr2intptr is same as intptr 
//so the above line will be equivalent to intptr = &var1 
    //All the three are the same 
    printf("%d",**ptr2intptr); 
    printf("%d",*intptr); 
    printf("%d",var1); 
+0

謝謝。我做了正確的選擇,而做測試:) –

1
// two int variables. 
int var1; 
int var2; 

// int pointer pointing to var1 
int *ptr = &var1; 

// pointer to int pointer..pointing to ptr 
int **ptr_to_ptr = &ptr; 

// now lets make the pointer pointed to by ptr_to_ptr 
// point to var2 
*ptr_to_ptr = &var2; 

// or alternatively you can do: 
// ptr = &var2; 
+0

嗯,現在它對我有意義:)謝謝 –