免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1695 | 回复: 11
打印 上一主题 下一主题

(求教)关于指针数据常量的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-18 10:34 |只看该作者 |倒序浏览
最近看书,对于关于关键字const有些疑问,请各位大侠指教:

对于指针数据常量,如:const int * ptr = 68;书中说的是ptr所指向的值*ptr是不变的,但是ptr的值是可变的,那:
当指针ptr的值被修改指向其他地址,ptr指针所指向的数据*ptr是否会被改变呢?如果不会被改变是否意思是说只是ptr指针指向的数据*ptr不会被修改?如果会被改变是怎么改变的呢?

^_^,不好意思,刚刚没表达清楚,中学时中文没学好的。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-05-18 10:36 |只看该作者

(求教)关于指针数据常量的疑问

第一个问号,不会。
第二个问号,没明白,^_^。

论坛徽章:
0
3 [报告]
发表于 2005-05-18 11:02 |只看该作者

(求教)关于指针数据常量的疑问

我觉得就是象strcpy的第二个参数那样,可以指向别的(废话,要不然函数岂不成废物了),但是不能改变它。

论坛徽章:
0
4 [报告]
发表于 2005-05-18 11:26 |只看该作者

(求教)关于指针数据常量的疑问

1、指针ptr所指向的内容不变。以下操作非法,编译器将报错
  ptr                  *ptr=k
|-----------|          |----------|
|    &k      |—— 〉 |     100 |
|-----------|          |----------|

  ptr                  *ptr=k
|-----------|          |----------|
|    &k      |—— 〉 |     68   |
|-----------|          |----------|



2、指针ptr的值可变,因此引起的*ptr值改变是可以的。

以下操作合法。
    ptr                  *ptr=k
|-----------|          |----------|
|    &k      |—— 〉 |     100 |
|-----------|          |----------|

  ptr                     *ptr
|-----------|          |----------|
|  &m    |—— 〉   | 68       |
|-----------|          |----------|

举例:
  1. /*
  2. ***********************************************
  3. *file name    : const_int_ptr.c
  4. *description : const int *ptr,when ptr has been
  5.                        changed what will happen to *ptr
  6. *note           :
  7. *author        : kernelxu
  8. *date           : 2005\05\18               
  9. ***********************************************
  10. */

  11. #include <stdio.h>;

  12. /*
  13. ***********************************************
  14. *function      :       main()
  15. ***********************************************
  16. */
  17. int main(void)
  18. {
  19.         int    k = 100;
  20.         int    m = 68;
  21.         const int *ptr = NULL;

  22.          ptr = &k
  23.         *ptr = 68;              //this is illegal, ERROR
  24.          ptr = &m              //this is OK
  25.    
  26.         printf("ptr = %p\n*ptr = %d\n", ptr, *ptr);

  27.         return 0;
  28. }/*END OF main()*/
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-05-18 11:34 |只看该作者

(求教)关于指针数据常量的疑问

  1. cont int *p = &
  2. *p = 21;
复制代码


我怎么记得以前只是给警告?现在报错了。是不是我记错了?

论坛徽章:
0
6 [报告]
发表于 2005-05-19 09:40 |只看该作者

(求教)关于指针数据常量的疑问

原帖由 "albcamus" 发表:

我怎么记得以前只是给警告?现在报错了。是不是我记错了?


在TC2.0和VC6.0下都报错!

论坛徽章:
0
7 [报告]
发表于 2005-05-19 09:44 |只看该作者

(求教)关于指针数据常量的疑问

原帖由 "kernelxu" 发表:


在TC2.0和VC6.0下都报错!


我在gcc3.4.0下也报错,可明明记得以前是只给警告的。。。恐怕记错了

论坛徽章:
0
8 [报告]
发表于 2005-05-19 10:14 |只看该作者

(求教)关于指针数据常量的疑问

原帖由 "albcamus" 发表:


我在gcc3.4.0下也报错,可明明记得以前是只给警告的。。。恐怕记错了


你没记错,我用gcc 2.91.66 出现的是警告 warning: assignment of read-only location,但能够生成可执行程序

论坛徽章:
0
9 [报告]
发表于 2005-05-19 10:15 |只看该作者

(求教)关于指针数据常量的疑问

原帖由 "nhw_cs" 发表:


你没记错,我用gcc 2.91.66 出现的是警告 warning: assignment of read-only location,但能够生成可执行程序


哈哈,谢谢兄弟!!

论坛徽章:
0
10 [报告]
发表于 2005-05-19 23:14 |只看该作者

(求教)关于指针数据常量的疑问

PTR能够改变它所指向的地址,但是不能在程序里面再一次给他赋值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP