ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【c语言】1.1 一次性讲清变量类型

【c语言】1.1 一次性讲清变量类型 一、静态变量1、static变量存放在静态存储区在程序整个运行期间都不释放而auto变量存放在动态存储区随着生命周期的结束而立即释放。2、static变量只赋值一次以后就不用赋值而auto变量在函数每调用一次都要赋初值。3、如果用户不对static变量赋初值则默认为0或\0而auto变量为不确定值。int n 10; //全局变量 void func1() { int n 20; //局部变量 printf(func1 n: %d\n, n); } void func2(int n) { printf(func2 n: %d\n, n); } void func3() { printf(func3 n: %d\n, n); } int main() { int n 30; //局部变量 func1(); func2(n); func3(); //这个到底是30还是10是1030这个局部变量在func3中无效见下文---- //代码块由{ }包围 { int n 40; //局部变量 printf(block n: %d\n, n); } printf(main n: %d\n, n); return 0; }输出20 30 10 40 30 // C语言规定只能从小的作用域向大的作用域中去寻找变量理解检验局部变量因为调用完函数之后被自动释放所以再次调用的时候之前函数内用过的局部变量都恢复原状了如果局部变量加了static那么调用函数完之后它的值是不会恢复原状的保持函数调用后的结果只有整个程序执行完后才会恢复原状原因是它和非static的局部变量在内存中的存放区域不同注意局部变量的作用域是函数范围局部变量是分配在堆栈上的而全局变量和静态变量是分配在数据段二、定义和声明变量定义用于为变量分配存储空间还可为变量指定初始值。程序中变量有且仅有一个定义。定义也是声明extern声明不是定义变量声明用于向程序表明变量的类型和名字。变量的声明和定义界限不是很清注意函数的定义和声明完全不一样void sum(int a, int b); 是函数的声明void sum(int a, int b) { } 是函数的定义三、const变量3.1 修饰指针const int *pa; 不能这样*p25(const 了*p*p就是一个常量就不能变。不能通过*p去修改,只能查看) //但是p可以修改指向其他空间int const *p这种写法同上int * const pa; 不能这样pb , 因为const的是p但是可以*p25;const int * const p int const * const p //都是常量了都不能修改了三、其他变量volatile易变的变量如果加了volatile那么结果就是标记a是随时改变的系统就不会对其进行优化。restrict可优化的操作只能用于指针表示该指针是访问对应空间的唯一且初始方式。int * restrict p(int *)malloc(sizeof(int)*5);p[0]0;p[0]3;p[0]5;这个时候会优化成p[0]8;没有优化就不会进行运算合并的优化。
返回列表