我是靠谱客的博主 清脆心情,这篇文章主要介绍指针与常量,现在分享给大家,希望可以做个参考。

指针与常量(c语言)

    • 指向常量的指针
    • 常量指针
    • 指向 “指向常量的常量指针”的指针(二级指针)
    • 总结
      • 指向常量的指针
      • 常量指针

常量
常量应该是这样:

复制代码
1
2
520,‘a’,3.14

或者这样:

复制代码
1
2
3
4
#define PRICE 520 #define A 'a' #define PI 3.14

还可以使用const关键字修饰

复制代码
1
2
3
4
- const int price = 520; - const char a = 'a'; - const float pi = 3.14;

复制代码
1
2
3
4
5
6
7
8
9
//对const关键字定义的变量赋值 #include<stdio.h> int main(){ const float pi = 3.14; printf("%fn",pi); pi = 3.1415; return 0; }

这样会出现错误

复制代码
1
2
error: assignment of read-only variable 'pi'

因为变量pi是只读的,如果用指针指向常量,并通过解引用指针赋值,也会出现同样的错误


指向常量的指针

复制代码
1
2
3
4
5
6
7
#include<stdio.h> int main(){ const int num = 520; const int *p=&num; *p = 1024; }
复制代码
1
2
error: assignment of read-only variable 'pi'

如果让const指针指向一个变量

复制代码
1
2
3
4
5
6
7
8
9
10
#include<stdio.h> int main(){ int num = 520; //const int cnum = 888; const int *pc = num; printf("num:%d,%num%pn",num,&num); printf("*pc:%d,pc:%pn",*pc,pc); *pc = 1024; }

这样仍然会被禁止

复制代码
1
2
[Error] assignment of read-only location '*pc'

但是可以通过给变量赋值改变*p的值


常量指针

复制代码
1
2
3
4
5
6
7
8
9
#include<stdio.h> int main(){ int num = 520; const int cnum = 888; int * const p = &num; *p = 1024; printf("*p:%dn",*p); }

可以顺利输出
但是

复制代码
1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h> int main(){ int num = 520; const int cnum = 888; int * const p = &num; *p = 1024; printf("*p:%dn",*p); p = &cnum; printf("*p:%dn",*p); }

这样就会出错


指向 “指向常量的常量指针”的指针(二级指针)

复制代码
1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h> int main(){ int num =520; const int cnum = 888; const int * const p = &num; const int * const *pp = &p; printf("pp:%p,&p:%pn",pp,&p); printf("*pp:%p,p:%p,&num:%pn",*pp,p,&num); printf("**p:%d,*p:%d,num:%dn",**pp,*p,num); }

顺利打印


总结

const修饰的变量具有只读的特性

指向常量的指针

指针可以修改为指向不同的常量
指针可以修改为指向不同的变量
可以通过解引用来读取指针指向的数据
不可以通过解引用修改指针指向的数据

常量指针

指向常量的常量指针
- 指针自身不可以被修改
- 指针指向的值可以被修改
指向常量的常量指针
- 指针自身不可以被修改
- 指针指向的值也不可以被修改

最后

以上就是清脆心情最近收集整理的关于指针与常量的全部内容,更多相关指针与常量内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部