指针常量和常量指针

指针常量和常量指针

   张吉吉     2021年3月13日 14:35     1101    

1.指针常量

这个就是指向常量的指针,既然是常量,那指针指向的值是不能够被改变的。

const int *p = &value

int const *p = &value

这两种写法都行。

示例1.

下边的例子是试图修改指针指向的变量的值

#include <stdio.h>
int main(void)
{
   
int a = 3;
    int
b = 4;
    const int
* p = &a;
   
*p = 8;
   
printf("%p --> %d\n", p , *p);
    return
0;
}

运行结果:

[root@Mongodb-master C]# gcc -o constp constp.c

constp.c: 在函数‘main’中:

constp.c:12:2: 错误:向只读位置‘*p’赋值

  *p = 8;

  ^

会提示p是只读的,不能改变其值。

示例2.

下边的例子是试图修改p指向的地址

#include <stdio.h>

int main(void)
{
   
int a = 3;
    int
b = 4;
    const int
* p = &a;
   
printf("%p --> %d\n", p , *p);
   
p = &b;
   
printf("%p --> %d\n", p , *p);
    return
0;
}

[root@Mongodb-master C]# ./constp

0x7ffe145cc674 --> 3

0x7ffe145cc670 --> 4

可以看到改变指针指向的地址是没有问题的。

 

2.常量指针

指针中储存的地址是不能被改变的。

int * const p = &value

示例3.

下边的例子试图修改指针指向的地址

#include <stdio.h>
int main(void)
{
   
int a = 3;
    int
b = 4;
    int
* const p = &a;
   
printf("%p --> %d\n", p , *p);
   
p = &b;
   
printf("%p --> %d\n", p , *p);
    return
0;
}

[root@Mongodb-master C]# gcc -o constp constp.c

constp.c: 在函数‘main’中:

constp.c:11:2: 错误:向只读变量‘p’赋值

  p = &b;

  ^

示例4.

下边的例子试图修改指针指向的变量的值。

#include <stdio.h>
int main(void)
{
   
int a = 3;
    int
b = 4;
    int
* const p = &a;
   
printf("%p --> %d\n", p , *p);
   
*p = 4;
   
printf("%p --> %d\n", p , *p);
    return
0;
}

[root@Mongodb-master C]# ./constp

0x7fffe502e28c --> 3

0x7fffe502e28c --> 4

 

这里有个技巧就是从右往左去读这个定义。

int * const ,也就是常量指针

const int * ,也就是指针常量

还有就是在声明常量指针的时候,必须将其初始化。


文章评论

0

其他文章