处女贴!新手自学C遇到一点难题!请高手指点!!

NM275490806 2012-08-13 05:04:01
只有非常量数据的地址才可以付给普通的指针:
double rates[5] = {88.99, 100.12, 59.45, 183.11, 340.5};
const double locked[4] = {0.08, 0.075, 0.0725, 0.07};
double *pnc = rates; //合法
pnc = locked; //非法
pnc = &rates[3]; //合法
这样的规矩是合理的。否则,你就可以使用指针来修改被认为是常量的数据
这是c primer plus书上266页的
以下是我自己加的
2 #include <stdio.h>
3
4 int main(void)
5 {
- 6 double rates[5] = {88.99, 100.12, 59.45, 183.11, 340.5};
- 7 const double locked[4] = {0.08, 0.075, 0.0725, 0.07};
8
9
- 10 double *pnc = rates; //合法
- 11 printf("*pnc = %d\n", *pnc);
12
- 13 pnc = locked; //不合法
- 14 printf("*pnc = %d\n", *pnc);
15
- 16 pnc = &rates[3]; //合法
- 17 printf("*pnc = %d\n", *pnc);
18
- 19 return 0;
20
- 21 }
以下是程序最终输出的结果
*pnc = 687194767 *pnc = 1202590843 *pnc = 51536076
1.我的问题是
printf("*pnc = %d\n", *pnc); 这句应该是输出*pnc = 88.99为什么结果却是*pnc = 687194767 ?
而我在调试的时候里面的至确实是88.99 这是调试的数据 pnc = (double *) 0x22ff10 *pnc = (double) 88.9999999999995

2.第二歌就给我解释下下面这句书上我看不明白
13 pnc = locked; //不合法

希望有经验的给破个处!!
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
NM275490806 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你的*pnc = 88.99根据是什么,就像一楼说的没有可能,只能是整型
[/Quote]
我的根据是rates赋给它的。数组的名字也是数组首元素的地址 *pnc = 88.99!不知道这样说对不对!!
NM275490806 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

printf和scanf严格按你输入的字符串来处理参数
你给它的字符串里是%d,它就认为你给它的是一个整型变量,具体它会执行哪些操作我不清楚,但可以肯定它绝不会输出一个浮点数

double*是一个指向double型变量的指针,locked是一个double常量数组,后者不能转化为前者,有啥看不懂的?
[/Quote]
谢谢!大家我经大家这么详细解释突然明白了!呵呵!还学的不够扎实
zc01@ 2012-08-13
  • 打赏
  • 举报
回复
你的*pnc = 88.99根据是什么,就像一楼说的没有可能,只能是整型
微型蚂蚁 2012-08-13
  • 打赏
  • 举报
回复
1. %d 改为%lf
2. locked为常量指针,表明里面的内容不可修改,如果pnc=locked合法
利用pnc就可以修改locked里面的内容了。
baichi4141 2012-08-13
  • 打赏
  • 举报
回复
printf和scanf严格按你输入的字符串来处理参数
你给它的字符串里是%d,它就认为你给它的是一个整型变量,具体它会执行哪些操作我不清楚,但可以肯定它绝不会输出一个浮点数

double*是一个指向double型变量的指针,locked是一个double常量数组,后者不能转化为前者,有啥看不懂的?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧