2016-12-04 566 views
2

如果ptemp是两个指针变量,其中p包含NULLtemp指向一些内存地址。两个指针变量可以指向相同的内存地址吗?

现在假设p = temp;

这意味着现在p指向相同的地址,其中temp指向。

这是否意味着两个指针变量ptemp现在指向相同的内存地址?

+0

是的,它的确也是指针用例之一。 –

+2

这就像问“两个整数是否具有相同的值?” – harold

+0

@harold:这是一个非2s补充体系结构的技巧问题;-) – chqrlie

回答

4

是两个指针变量可以指向相同的对象:

指针是包含一个C对象的地址,或空指针对象。

  • 多个指针可以指向相同的对象:

    char *p, *q; 
    p = q = "a"; 
    
  • 指针甚至可以指向自身:

    void *p; 
    p = &p; 
    
  • 这里是双重链接循环列表另一示例与单个元素:nextprev链接都指向相同的位置,结构本身:

    struct dlist { 
        struct dlist *prev, *next; 
        int value; 
    } list = { &list, &list, 0 }; 
    
+0

我认为这只适用于void指针。是这样吗? – lsof

+1

@RajasubaSubramanian:是的,但你有类似的情况与列表链接:'struct list {struct list * car,* cdr; } list = {&list,NULL];' – chqrlie

1

是的!多个指针可以指向相同的东西。

0

是2个指针变量可以指向相同的存储器地址。

我们知道指针是一个包含相同数据类型地址的变量。考虑下面的例子C

#include<stdio.h> 

int main() { 
int a,*pointer1; 
a = 10; 
pointer1 = &a; 
int *pointer2; 

printf("\n Val : %d",*pointer1); //This contains address of the variable a - so accessing it with * prints its value - value of “a" 
printf("\n Val : %d", *pointer2); //This contains some junk value - so accessing it with * causes segmentation fault - since there might not be memory address with that junk value  

pointer2 = pointer1;    //Now pointer1 reference i.e.; address value stored in pointer1 is made a copy and now both pointer1 and pointer2 will point to the same memory location 
printf("\n Val : %d", *pointer2); //Now this would print the value of “a" 

return -1; 
} 

这同样适用于链表地址。你的变量“p”和“temp”会指向相同的内存地址!

+0

'* pointer2'不仅仅是*一些垃圾值*,取消引用未初始化的指针会调用未定义的行为,这意味着程序可能会以各种意想不到的方式失败。 – chqrlie

+0

当指针2初始化时,会分配一些内存。我们不知道内存位置有什么价值(我称之为垃圾价值)。当我们试图在pointer2位置中引用值时 - 编译器认为它是一个地址值,并尝试从该位置获取值(可能会或可能不存在)。 – lsof

+0

来自未知存储位置的参考值将引发“Segmentaion故障”错误。 – lsof

相关问题