c语言里,如何把指针变量的地址赋给一个变量?

int*p,*q;p=newint;*p=30;*q=p;最后一句报错,换成q=&p;不行换成inta=p;*q=a;不行所以,想问,如何把指针变量的地址---注意:是地... int *p,*q;
p=new int;
*p=30;
*q=p;
最后一句报错,换成q=&p;不行
换成int a=p; *q=a; 不行
所以,想问,如何把指针变量的地址---注意:是地址的地址,而非指向的地址---赋给另外一个变量?
展开
 我来答
听不清啊
高粉答主

2015-05-16 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

指针变量的地址只能赋给指针变量。

#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;

}

linnjing
2013-10-14 · TA获得超过2632个赞
知道大有可为答主
回答量:1230
采纳率:91%
帮助的人:516万
展开全部
p是指针变量,取p地址的地址赋值给一个变量,用&p,这是对的。
问题在于用来存储这个结果的变量是什么类型的,应该是指向指针的指针,int **q。

int *p, *q
p=new int;
*p = 30;
*q = p; // 直接访问*q是危险的!应该先给q赋值再访问*q,比如 q= new int;

q = &p; // 类型不对,定义 int **q, 才可以 q= &p
更多追问追答
追问
您说的对,先谢谢。
如果我没有理解错,用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,还是没搞明白吧。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
2013-10-14 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5688万
展开全部
p=new int; -- new 是 C++ 里的东西,不能用于C。要用 malloc

#include<stdio.h>
main(){
int *p,*q; // 声明指针 p,q
p= (int *) malloc(sizeof(int)); // 给 p 分配 1个 int 单元
*p=30;
q=p; // p 的地址赋给 q
printf("address: p=%p q=%p\n", p,q); // 输出 p,q 地址
printf("value: p=%d q=%d\n", *p,*q); // 输出 p,q 指向的值
return 0;
}

============
也允许这样:
int a;
int *p = &a; //允许
int *q;
q = &a; //允许
q = p; //允许
=============
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天策经纬
2013-10-14
知道答主
回答量:27
采纳率:0%
帮助的人:17.9万
展开全部
注意,应该是:q=p;
因为int *p;应该看成int* p,是指定义一个指向int* 类型的名字叫做P的数据
q=&p 是错误的,因为q是int* 的指针数据,p也是,这个赋值操作两边类型不一致

int a=p; *q=a;同上,a=p是什么意思,两边类型不一致,p是指针,a是整形数据应该写成int a=*p;

*q=a;改为 q=&a 意思为让q指向a,

我想应该是这样的,不信的话最好是举个例子到编译上试试,建议看本书《c和指针》
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiu398714711
2013-10-14
知道答主
回答量:19
采纳率:0%
帮助的人:7.5万
展开全部
强制转换一下试一试,
例如:*q=p:改成*q=(int)(p);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式