c数组名和指针

1.请看下面的代码:
int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6}; 
pa = a; 
for (i = 0; i <= 9; i++) 

        printf("%d\n", *pa); 
        pa++; /*注意这里,指针值被修改*/ 


    可以看出,这段代码也是将数组各元素值输出。不过,你把循环体{}中的pa改成a试试。你会发现程序编译出错,不能成功。看来指针和数组名还是不同的。其实上面的指针是指针变量,而数组名只是一个指针常量。指针pa在整个循环中,其值是不断递增的,即指针值被修改了。数组名是指针常量,其值是不能修改的,因此不能类似这样操作:a++。

2、 再请看下面的代码
int i, a[] = {3,4,5,6,7,3,7,4,4,6}; 
int *const pa = a; /* 注意const的位置:不是const int *pa */ 
for (i = 0; i <= 9; i++) 

printf("%d\n", *pa); 
pa++ ; /*注意这里,指针值被修改*/ 

这时候的代码能成功编译吗?不能。因为pa指针被定义为常量指针了。这
时与数组名a已经没有不同。这更说明了数组名就是常量指针。但是……
int *const a = {3,4,5,6,7,3,7,4,4,6}; /*不行*/ 
int a[]={3,4,5,6,7,3,7,4,4,6}; /*可以,所以初始化数组时必定要这样。*/ 


3.int *const pi VS  int const *pi

1)  如果const 修饰在*pi前,则不能改的是*pi(即不能类似这样:
*pi=50;赋值)而不是指pi。
2)  如果const 是直接写在pi前,则pi不能改(即不能类似这样:pi=&i;
赋值)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值