2012-05-03 59 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

嗯,现在它对我有意义:)谢谢 –