我的小小学习笔记(2)之C语言——浅谈关键字 const,static,volatile(1)

来源:互联网 发布:简体转繁体软件 编辑:程序博客网 时间:2024/06/05 03:52

1.const(它可应用在声明任何类型的变量的语句中 ,固化该变量的值)

test.c(无const)

*指针变量是存放地址的,如果想找到原来的那个空间,加“ * ",解引用。

*指针p是4个字节(32位平台),8个字节(64位平台)。

#include<stdio.h>int main(){int num = 10;//整型变量,4个字节int *p = #*p = 20;printf("num=%d\n", num);system("pause");return 0;}
运行结果


图示



test.c(有const)

#include<stdio.h>int main(){const int num = 10;int *p = (int *)#//强制类型转换与p同类型*p = 20;printf("num=%d\n", num);system("pause");return 0;}

运行结果

图示

编译器优化了代码,C中没有优化,所以输出20;C++中优化,输出10。

2.volatile(作用:保证内存的可见性,使每次变量都到内存去取)

test.c

#include<stdio.h>int main(){ volatile const int num = 10;int *p = (int *)#//强制类型转换与p同类型*p = 20;printf("num=%d\n", num);system("pause");return 0;}


运行结果


3.static(修饰局部变量,把变量放在静态区,使变量的生命周期发生变化,作用域同局部变量)

*全局变量:在哪里都可以使用,把变量定义在所有代码块外。

                    生命周期:程序开始到程序结束。

                     作用域:整个程序。

*局部变量:把变量定义一个代码块内。

                   生命周期:进入作用域到出作用域结束。

                    作用域:局部范围内。

test.c(无static)

num是局部变量,num出了void test(),就销毁了,重新赋值为0,进行计算。

#include<stdio.h>void test(){int num = 0;num = num + 1;printf("num=%d\n", num);}int main(){ int i = 0;for (i = 0; i < 5; i++){test();}system("pause");return 0;}


运行结果


test.c(有static)

num被static修饰,等程序完全结束才销毁。

#include<stdio.h>void test(){static int num = 0;num = num + 1;printf("num=%d\n", num);}int main(){ int i = 0;for (i = 0; i < 5; i++){test();}system("pause");return 0;}


运行结果


图示(内存图)


*由于是入门新手,还望大神们批评指正。

                 



阅读全文
1 0
原创粉丝点击