注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

C语言学习:常量指针和指向常量的指针  

2013-02-22 16:08:26|  分类: C语言 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

             今天在学习常量指针和指向常量的指针两个概念时,开始总感觉很混乱,后来实验后,
总算明白了,记录下,以后忘记了还能看看复习。


一 常量指针
  
  常量指针是指指针中存储的地址不能改变,但能更改指针指向的值,声明时格式如下:

    int *const pcount=&count;
   
   编写以下脚本测试:
   
--1.1 常量指针测试脚本
 [pg92@redhatB point]$ vim test_1.c

/*Program test_1.c  常量指针: 指针存储的地址不能改变,但能改变指针指向的值.*/

#include <stdio.h>

int main(void)
{
 int count=43;
 int sum=45;
 int *const pcount=&count; /*Defines a constant, means "pcount" read-only variable */

 printf("\n step1 count=%d",count);
 *pcount=143;
 pcount=&sum;
 printf("\n step2 count=%d",count);
 printf("\nthe address of pcount is %p",pcount);
 printf("\nthe value of pcount is %d\n",*pcount);
}
   

--1.2 编译
 [pg92@redhatB point]$ gcc -o test_1 test_1.c 
test_1.c: In function ‘main’:
test_1.c:13: error: assignment of read-only variable ‘pcount’
     备注:更改常量指针地址时,报错。

--1.3 去掉 "pcount=&sum;" 行时,正常执行
 [pg92@redhatB point]$ gcc -o test_1 test_1.c 
[pg92@redhatB point]$ ./test_1

 step1 count=43
 step2 count=143
the address of pcount is 0xbfc7b224
the value of pcount is 143
   备注:从上面看出常量指针 pcount 存储的地址不能被修改,但能更改它指向的值。
  
  
  
二 指向常量的指针
   
   指向常量的指针是指该指针指向的值不能通过指针改变,但能更改指针存储的地址。
   声明如下:
  
    const int *pcount=&count;
   
   编写脚本测试:
   
--2.1 指向常量的指针测试脚本。
 [pg92@redhatB point]$ vim test_2.c

/*Program test_2.c  指向常量指针: 指针指向的值不能改变,但能改变指针地址.*/

#include <stdio.h>

int main(void)
{
 int count=43;
 int sum=45;
 const int *pcount=&count; /*Defines a pointer to a constant,means "*pcount" is read-only. */

 printf("\n step1 *pcount=%d",*pcount);
 printf("\n step1 The address of pcount is %p",pcount);
 pcount=&sum;
 printf("\n step2 *pcount=%d",*pcount);
 printf("\n step2 The address of pcount is %p\n",pcount);
}   
   

--2.2 编译执行
 [pg92@redhatB point]$ gcc -o test_2 test_2.c
[pg92@redhatB point]$ ./test_2

 step1 *pcount=43
 step1 The address of pcount is 0xbfab4928
 step2 *pcount=45
 step2 The address of pcount is 0xbfab4924
[pg92@redhatB point]$ 
   备注:上面测试说明指针存储的地址改变了。 如果脚本中增加“ *pcount=&sum;” 代码,则会报以下错:
 
 --2.3 ERROR
 [pg92@redhatB point]$ gcc -o test_2 test_2.c
test_2.c: In function ‘main’:
test_2.c:14: error: assignment of read-only location ‘*pcount
    备注:说明不能通过 *pcount 更改指向变量的值;从以上实验看出,指向常量的指针指向的值并是保持不变,
               因为虽然不能通过 *pcount 来更改指针指向的值,但更改指针地址后,它指向的值依然被改变。
        
  评论这张
 
阅读(10082)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016