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

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

一 常量指针

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

1
int *const pcount=&count;

编写以下脚本测试:
1.1 常量指针测试脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[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 %dn",*pcount);
}

1.2 编译

1
2
3
[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;" 行时,正常执行

1
2
3
4
5
6
7
[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 存储的地址不能被修改,但能更改它指向的值。

二 指向常量的指针

指向常量的指针是指该指针指向的值不能通过指针改变,但能更改指针存储的地址。
声明如下:

1
const int *pcount=&count;

编写脚本测试:
2.1 指向常量的指针测试脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[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 %pn",pcount);
}

2.2 编译执行

1
2
3
4
5
6
7
[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=∑” 代码,则会报以下错:
2.3 ERROR

1
2
3
[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 来更改指针指向的值,但更改指针地址后,它指向的值依然被改变。

原创文章,作者:bd101bd101,如若转载,请注明出处:https://blog.ytso.com/237940.html

(0)
上一篇 2022年1月29日
下一篇 2022年1月29日

相关推荐

发表回复

登录后才能评论