您的位置:首页 > 其它

c数组名和指针

2015-09-12 14:15 162 查看
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;

赋值)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: