int *p,*q;
p=new int;
*p=30;
*q=p;
最后一句报错,换成q=&p;不行
换成int a=p; *q=a; 不行
所以,想问,如何把指针变量的地址---注意:是地址的地址,而非指向的地址---赋给另外一个变量?
指针变量的地址只能赋给指针变量。
#include "stdio.h"
int main()
{double pi=3.1415926,*p,**q;
p=π /*把double变量的地址赋给p */
q=&p; /*把指针变量p的地址赋给q */
printf(" pi=%.7lf\n *p=%.7lf\n**q=%.7lf\n",pi,*p,**q); /*检查赋值的效果 */
system("pause");
return 0;
}
您说的对,先谢谢。
如果我没有理解错,用new,是在 堆 里开辟一个空间吧?
那我想实现这样一个结构(不考虑定义链表结构),用堆中的一个地址p保存第二个地址q,第二个地址的值进行赋值,用指针p来表示第二个地址的值
int *p,*q;
p=new int;
q=new int;
*p=int(q);
*q=8;
到这里都可以编译通过,但问题是我如何用p表示出8这个值呢?
1.首先,int(q) 是c++的语法,意为“构造”一个int类型的实例。C是不能这么用的,C一般用(int)q这种写法。
2. *p = int(q)的意思是对 *p ,即p所指向的地址赋值,所赋的值是一个int类型的数据,其值“恰好”等于q的值而已,与q本身及其所指向的内容没有关系。 你可以试试这样写 *p = int( main)。
本质上,一个强制类型转换,将任意的东西强制转换成int,即然你已经强制转换了,一般情况下编译是不会再报错的。
3.怎么用p表示8的问题,*(int *)(*p)。这里*p 与 q的值一样,但类型不同,强制转换一下,变成指针,再用*取内容,即8.
结论,指向指针的指针,int **p,还是没搞明白吧。
好吧,其实我一直是说的C++。。。。怨我,少打了2个加号
追答为了代码复用,C++在类及类的相关定义方面加强了很多。指针方面,C和C++的差别不大。
本回答被提问者采纳