什么“取消引用”指针意味着什么?

时间:2011-02-10 09:16:22

标签: c++ c pointers dereference

请提供一个解释示例。

6 个答案:

答案 0 :(得分:647)

答案 1 :(得分:85)

取消引用指针意味着获取存储在指针指向的内存位置的值。运算符*用于执行此操作,称为解除引用运算符。

int a = 10;
int* ptr = &a;

printf("%d", *ptr); // With *ptr I'm dereferencing the pointer. 
                    // Which means, I am asking the value pointed at by the pointer.
                    // ptr is pointing to the location in memory of the variable a.
                    // In a's location, we have 10. So, dereferencing gives this value.

// Since we have indirect control over a's location, we can modify its content using the pointer. This is an indirect way to access a.

 *ptr = 20;         // Now a's content is no longer 10, and has been modified to 20.

答案 2 :(得分:15)

指针是值的“引用”..很像库函数是对书的引用。 “取消引用”电话号码实际上正在通过并检索该书。

int a=4 ;
int *pA = &a ;
printf( "The REFERENCE/call number for the variable `a` is %p\n", pA ) ;

// The * causes pA to DEREFERENCE...  `a` via "callnumber" `pA`.
printf( "%d\n", *pA ) ; // prints 4.. 

如果这本书不存在,图书管理员就会开始大喊大叫,关闭图书馆,并且有几个人会调查一个人找不到的书的原因。

答案 3 :(得分:10)

简单来说,解除引用意味着从该指针指向的某个内存位置访问该值。

答案 4 :(得分:7)

来自Pointer Basics的代码和解释:

  

取消引用操作从...开始   指针并跟随其箭头   访问它的指针。目标可能是   看看指针状态或者   改变指针状态。该   对指针的取消引用操作   仅当指针有一个时才有效   指针 - 指针必须是   已分配,必须设置指针   指向它。最常见的错误   在指针代码中忘记设置   指责者。最普遍的   由于该错误导致运行时崩溃   代码是一个失败的解除引用   操作。在Java中不正确   取消引用将被礼貌地标记   由运行时系统。在编译中   语言,如C,C ++和Pascal,   不正确的解除引用会   有时崩溃,有时甚至崩溃   腐败的记忆在一些微妙,随机   办法。编译中的指针错误   语言很难跟踪   因为这个原因。

void main() {   
    int*    x;  // Allocate the pointer x
    x = malloc(sizeof(int));    // Allocate an int pointee,
                            // and set x to point to it
    *x = 42;    // Dereference x to store 42 in its pointee   
}

答案 5 :(得分:2)

我认为所有以前的答案都是错误的,因为他们 说明解除引用意味着访问实际值。 维基百科给出了正确的定义: https://en.wikipedia.org/wiki/Dereference_operator

  

它对指针变量进行操作,并返回一个等于指针地址值的l值。这称为“解除引用”指针。

也就是说,我们可以永远取消引用指针 访问它指向的值。例如:

char *p = NULL;
*p;

我们取消引用NULL指针而不访问它 值。或者我们可以这样做:

p1 = &(*p);
sz = sizeof(*p);

再次,解除引用,但从不访问该值。这样的代码不会崩溃: 当您实际访问数据时,会发生崩溃 指针无效。然而,不幸的是,根据 标准,解除引用无效指针是未定义的 行为(有一些例外),即使你没有尝试 触摸实际数据。

简而言之:取消引用指针意味着应用 取消引用它的运算符。该运算符只返回一个 l-值供您将来使用。