请提供一个解释示例。
答案 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-值供您将来使用。