c语言:指向指针的指针

来源:百度知道 编辑:UC知道 时间:2024/05/18 06:27:36
int **pt,*p,a;
a=10;
p=&a;
pt=p;

书本上这样一段代码来表示指向指针的指针的初始化。
可是pt=p这句我不是很理解。p是a的地址,然后pt=p,不是把p赋值给pt吗?
这样pt指向的也只是a了不是指向指针p了吧?我觉得pt=&p这样子不是更直观吗?为什么指向指针的指针pt要这样赋值(pt=p)而不是(pt=&p)?
确实也。。
我在tc3.0运行我写的程序,输出了8963(应该是个地址值),而不是10.
看来是我们的谭浩强大师出错了。。

有以下代码:
int **pt,*p,a; // 变量声明
a=10; // 假定a的地址是0x11223344
p=&a; // 现在p的值就是0x11223344
pt=p; // 现在pt的值是0x11223344

这样写是在TC2(Win-TC)里是可以编译通过的,但是在VC中(C++有严格的类型检查)无法编译通过,因为pt和p的类型不匹配,无法将int*类型转换为int**类型。

实际上,我认为是书上写错了。确实应该是pt=&p,这样才是真正的指向指针的指针,且**pt的值才是a的值。

调试:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
int **pt,*p,a;
a=10;
p=&a;
pt=&p;
printf("%d\n",**pt);
getch();
}

输出结果:
10
Press any key to continue

指针指向的应该是个地址
p所指向的是a的地址
pt=p 是指pt指针指向的地址=p指针指向的地址

个人认为 pt=p 错了。
=左右两边变量类型不一致。
可以修改为
pt = (int**)p;
如果不明白这个含义,可以试着看看*p,*pt
*p内容为10
*pt指针为10,**pt是其内容,应该是个无效值。