关于C的指针

[复制链接]
查看11 | 回复5 | 2009-4-3 15:33:52 | 显示全部楼层 |阅读模式
下面一段程序:
#include
using namespace std;
int main()
{
double dval=3.14;

double *cptr=&dval;
//这里有些不明白
cout<<"dval="<<dval<<" , "<<"cptr="<<*cptr<<endl;
dval=5.28;
cout<<"dval="<<dval<<" , "<<"cptr="<<*cptr<<endl;
return 0;
}
而把指针定义的那一句分解成两句:
double *cptr;
*cptr=&dval;
这样就会编译错误,说“‘=’不能把double *转换为 double类型”
再把第二句改一下:
double *cptr;
cptr=&dval;
这程序就可以通过编译了。
请问这是为什么啊?有点晕。

回复

使用道具 举报

千问 | 2009-4-3 15:33:52 | 显示全部楼层
(1)double *cptr;// 定义一个指向double类型的指针变量*cptr=&dval;// 这个是错误的。你的原意是让cptr指向变量dval的地址,而指针前面的*为解引用运算符,即提取指针所指的内容。而等号的右边,在变量前面的&为取地址运算符,即把变量dval的地址取出来。你这样写当然就会产生编译错误,即不能把double *转换为 double类型” (2)double *cptr; // 定义一个指向double类型的指针变量cptr=&dval;// 取出变量double型变量dval的地址,并赋予double指针,这样cptr就指向了变量dval的内存地址了。这个是正确用法...
回复

使用道具 举报

千问 | 2009-4-3 15:33:52 | 显示全部楼层
怎么说呢,这是个很基础的问题。 double *cptr=&dval 是定义指针时给指针赋值,该句其实是这样的,可以分为,先定义指针double *cptr,然后把dval的地址即&dval赋给指针cptr。在定义时可以连写即double *cptr=&dval 。 但是分开写时,要注意,cptr是指针,只能把地址赋给它,即&dval,所以,定义...
回复

使用道具 举报

千问 | 2009-4-3 15:33:52 | 显示全部楼层
*被称为“解引用操作符” 定义指针时表明紧跟后面的变量是一个指针; 其他情况下表示对该指针解引用,此时指指针指向的对象。 如: double *cptr; *cptr=&dval; 定义了一个double指针,名字叫cptr,编译错误因为上述第二种情况,*cptr此时对指针解引用是指指针指向的那个对象,但这个时候指针还没有初始化,...
回复

使用道具 举报

千问 | 2009-4-3 15:33:52 | 显示全部楼层
double *cptr=&dval; 相当于double *cptr; cptr=&dval; 在double *cptr=&dval; 中你看这样写你就明白了double*cptr=&dval;(这两种写法是两种不同的编程风格,但实际是一样的)cptr是那个变量的名称 double* 是类型你写成double ...
回复

使用道具 举报

千问 | 2009-4-3 15:33:52 | 显示全部楼层
double *cptr=&dval; 是在声明指针变量的同时就给其初始化赋值.这里的*是表示声明一个指针变量.如果你写double *cptr; *cptr=&dval; 的话,第2句的*就成了取指针变量cptr所指的值了,这个*是取值运算符,不同于第一句的*了....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行