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

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 来更改指针指向的值,但更改指针地址后,它指向的值依然被改变。
        
  评论这张
 
阅读(10084)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

我的照片书 - 博客风格 - 手机博客 - ta0x}as x} b rb">&nEespan> {elseif x.morip="pf="abliccst"> : cl82">ext/www./rss+xmcus= ="RSS" hidefo>>ogDetail.nextBlogPermrss//a>   &a rel="nofollow"  &f="httplay$_foot_subiv cbss="an> 9
-关-t.hslayefa="clearfix"el="nofollowlastplh sp"js"yle="_zoom:1/">-关-t.hs 1ean>1-4"c h">&nbsan> 博客风格
我的 _blank" href="${xlish=" : cof(y.v) {>
我的 _blank" href="${xlish="nbspvpe}n tarea> <'; x.mbdwa bdc0"><\'h'>>api/263304040201672720131"><'; x.mbdwa bdc0vcd\'h'>>api/2633040402016loc/loctcha } x?pkg ntId= //文章礽me'; x.mbdwa bdc0mrt\'h'>>b.\> 'h'>>b.\>睠scrlign.do'; x.mw ow.CF 'h{ x.morcaShowYo x.mo,y:n:-3 x.mo,cb:'1 x.mo,ccShowYo x.mo,cdShowYo x.mo,crge-31 x.mo,ck:0 x.mo,ci:['api/263304040201tarea> ,'>>ss=to.仔挛趴突ss=to/"> x.molass=,'ud/263304040201tarea> x.molass= x.molass= x.molass=] x.mo,cj:[-3] x.mo,c1311 x.mo,cm:["",y/">/",y来譽m/",ymusic/",y_olletaion/",y /",yprof{x./",ypprank/",y",y '],'enabled':[ <,6],'itle|denav':pkgse}${('11111111',2 x.mo,cuShowYo x.mo,cvShowYo x.mo,cwShowYo x.m}; x.mw ow.UD 'h{}; x.mUD. 'h{ x.mor /if}mBl //文章 x.mola,/if} olfrancs31 x.moss,; 蚾lfrancs0 x.mola, {else} :1445仔743538 x.mola,blascom:'>>ogDetail.nextBlogPerm0 x.mola,g pos'他0 x.mola,iframolfrancs3
0 x.mola,ss=to仔聅p;蚾lfrancs30 x.mola,ss=to仔翲 sp;蚾lfrancs30 x.mola,TOKEN_HTMLMODULE100 x.mola,isM|deiUif}B">睸howYo x.mass,isWlogUif}tIntr x.mola,sRanklishe x.m}; x
: cl8miiPermaLink = "h
博客风格 ('>>music.phdkQ6dGtJKphdjs?0"1'.1 xnfo xnfoJ. "0"aByDWR(bdwa bdc0"><,'MusicBeanNew','iemaipya" hrMusicSessionTs xi'o${b[.1 xn}, 0 0.1 x
= dord .c .async 'h11 xlass2pt"> .cwd 'h'>>/1.\> Child(2pt"> .1 xlass },300.1 x x
>