大家关于二级指针
int** tptr
int* ptr
int a = 3
int b = 4
ptr = &a
tptr = &ptr //此时tptr =?
如果
*tptr = &b //此时tptr =? 如果tptr 改变了,那么 ptr =?, *ptr =?
能不能详细讲解一下二级指针的原理
问题点数:24、回复次数:6Top
1 楼summer_xzw(~~~曾经沧海~~~)回复于 2001-05-16 18:42:00 得分 0
这种题目自己运行一下不就知道了吗?Top
2 楼lj9852(Loading)回复于 2001-05-16 18:59:00 得分 0
呵呵,这样这么讲?自己写些程序测试一下不就搞定了吗Top
3 楼liu_feng_fly(笑看风云 搏击苍穹 衔日月)回复于 2001-05-16 19:03:00 得分 4
tptr = &ptr //此时tptr =? ptr的地址
*tptr = &b //此时tptr =? 如果tptr 改变了,那么 ptr =?, *ptr =?
tptr不变 tptr 改变了 不影响别的
Top
4 楼starsoft007(星软)回复于 2001-05-21 18:51:00 得分 5
二级指针就是指向指针的指针了
如你上面说的ptr=&a,ptr里装着a变量的地址.再tptr=&ptr
那么tptr里就装着变量ptr的地址,所以tptr就是二级指针了
如果还不明白的话,可以这样想
假设甲知道乙的地址,而乙又知道丙的地址,那么丙就是a了
而乙就是ptr,甲就是tptr了.
不知这样说你能不能明白.
Top
5 楼whhif(Phenix)回复于 2001-05-21 20:04:00 得分 15
终于到了这个问题了!
讲到二级指针的问题,首先得谈一谈数组的
内存存储方式,
例如:
int a[10];
首先,再内存中开辟22个字节的空间,
其中,前两个字节用来装数组a的首地址,
其他20字节用来装整数,
数组名是一个指针型符号常量,
虽说符号常量是在C++中才被提出的,
但数组名是个例外,例外的还有函数名,
实际上二级指针指向的是一个二维数组,
例如:
int a[2][3];
其实,二维数组中存放的是两个一维数组,
这里我把a拆成三个数组b[2],c[3],d[3];
同一维数组一样,
首先在内存中开辟两个字节来存放数组名a;
a还是指针型符号常量;
这里a指向的是b数组的首地址,
然后开辟四个字节存放b数组,
然后再开辟12个字节来分别存放c和d数组;
b[0]指向的是c数组,
b[1]指向的是d数组,
我说的已经够清楚了吧.
二级指针和二维数组的情形一样,
因此,可以定义
int **a;
int b[10][10];
a=b;
你的这个问题是:
假设(&a=A;&b=B;)
int** tptr
int* ptr
int a = 3
int b = 4
ptr = &a
tptr = &ptr //此时tptr =存放指针变量ptr的地址;
如果
*tptr = &b //此时tptr =不变,如果tptr 改变了,那么 ptr =不变, *ptr =3;
相当于
int array[2][1]={3,4};
int **tptr;
int *ptr;
ptr=array[0][0];
tptr=array[1];\\tptr改变了,不关其它变量的事;
我相我是应该讲明白了吧,你明白了吗?Top
6 楼whhif(Phenix)回复于 2001-05-22 21:41:00 得分 0
补充一点,其实是写错了,
tptr=a;
也就是array[1]的地址.
不是tptr=array[1];Top




