楼主,您好。您需要理解指针的含义:所谓指针 p ,是一个变量,和普通的变量 int a,b,c,d...一样,里面具体的数值都是二进制值,如 01001011,只不过恰好 p 中储存的值是另外一组数据的首地址,而 a,b,c,d 中的值是普通数据,当然事实上 a,b,c,d 也能储存一组数据的地址,只不过在对地址读数据时需要先把 a,b,c,d 强制成某种类型的指针,如:(int*)a, (char*)b, (double*)c, (float*)d,之后在取数据时再调用取值操作 *,如:*(int*)a, *(char*)b, *(double*)c, *(float*)d,这样和 *p 一样就可以把某地址的值读出来了,这样做的原因是符合语言的严整性,保证各个变量逻辑上的规则性,不然编译器无法理解,比如 *a,这样做对 a 中的地址是取出 4 个字节的值,还是 1 个、8个字节的值,这就不明确了,所以需要对变量做强制类型转换。回到楼主的问题,p 和 q 与上面讨论的本质是一样的,经过 q = p 的赋值后,这两个变量中储存的二进制值是一样的,比如都是 01101010,换成十进制是 106,也就是说 p 和 q 中的值都是 106,对 p 和 q 同时做取值或赋值操作 *p 与 *q ,都是对值为 106 的这个地址做取值或赋值操作,因此看上去好像 q 也能存储 p 的数据。
回复 10楼 叶纤
抱歉,前几天没上线#include<stdio.h>
#include<strings.h>
struct node
{
int data;
struct node *pNext;
};
int main()
{
struct node *head;
head = (struct node *)malloc(sizeof(struct node));
if(NULL == head)
{
printf("malloc error!\n");
exit(0);
}
return 0;
}
这个是为单链表的头结点分配了一个内存并判断是否分配成功的程序,您垂阅一下。