指针变量的地址只能赋给指针变量。
#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;
}
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
p=new int; -- new 是 C++ 里的东西,不能用于C。要用 malloc
#include
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和指针》