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; 不行
所以,想问,如何把指针变量的地址---注意:是地址的地址,而非指向的地址---赋给另外一个变量? 展开
p=new int;
*p=30;
*q=p;
最后一句报错,换成q=&p;不行
换成int a=p; *q=a; 不行
所以,想问,如何把指针变量的地址---注意:是地址的地址,而非指向的地址---赋给另外一个变量? 展开
6个回答
展开全部
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
问题在于用来存储这个结果的变量是什么类型的,应该是指向指针的指针,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,还是没搞明白吧。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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; //允许
=============
#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; //允许
=============
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
注意,应该是: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和指针》
因为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和指针》
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
强制转换一下试一试,
例如:*q=p:改成*q=(int)(p);
例如:*q=p:改成*q=(int)(p);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询