二级指针

来源:百度知道 编辑:UC知道 时间:2024/05/26 13:51:22
大体写一下:
#include<stdio.h>
main()
{
int i;char*p,*q,*first;
p=malloc(sizeof(int)+sizeof(char*));
first=p;*(int*)p=1;p+=sizeof(int);
for(i=2;i<10;i++,p+=sizeof(int))
{q=malloc(sizeof(int)+sizeof(char*));
*(char**)p=q;p=q;*(int*)p=i;}………………(1)
*p='\0';
for(p=first;*p;p+=sizeof(int),p=*(char**)p)…………(2)
printf("%d",*(int*)p);
putchar('\n');
system("pause");
}
此程序中为什么要用二级指针?
如果要实现把结点尾存入下一个结点的首地址,(1)处用*p=q;不行吗?
(2)处为什么不能用p=*p呢?
那用(char*)(*p)=q;
p=(char*)(*p);可以吗?

终于将你的程序读懂了,实际上这是在构造一个链表,
在(1)处
*(char**)p=q,因为p本身指向的是一个字符串的指针,所以*p是char*,
要达到p->next=q的目的(注意由于之前已经作了p+=sizeof(int); 所以此时p=p->next了),必须是将其转成二级指针,然后再p=q,将p移动到刚插入的结点;完成链表添加一个结点。
在(2)处
p+=sizeof(int),p=*(char**)p,这两句的目的就是p=p->next.

个人建议:这样做完全没必要,代码难以理解,若是定义一个struct,一切都会清楚了。

1.*p是char型,q是char*型,当然不能用*p=q;要先用char**强制转换一下,*(char**)就是char *型了.

2.同理

....
汗~!
你分清楚指针变量,指针这两个不同的概念,习惯上人们会把他们都称为指针。
但是你内心要明白,指针变量是存放指针的变量,指针内容是指针变量存放的指针的内容。