关于c语言auto变量和static变量区别 关于C语言中auto和register的问题

c\u8bed\u8a00\u4e2d\u53d8\u91cf\u50a8\u5b58auto\u548cstatic\u662f\u600e\u4e48\u7528

\u5c40\u90e8\u53d8\u91cf\u6309\u7167\u5b58\u50a8\u5f62\u5f0f\u53ef\u5206\u4e3aauto, static\u3002
\u4e0eauto\u7c7b\u578b(\u666e\u901a)\u5c40\u90e8\u53d8\u91cf\u76f8\u6bd4, static\u5c40\u90e8\u53d8\u91cf\u6709\u4e09\u70b9\u4e0d\u540c\uff1a
1. \u5b58\u50a8\u7a7a\u95f4\u5206\u914d\u4e0d\u540c
auto\u7c7b\u578b\u5206\u914d\u5728\u6808\u4e0a, \u5c5e\u4e8e\u52a8\u6001\u5b58\u50a8\u7c7b\u522b, \u5360\u52a8\u6001\u5b58\u50a8\u533a\u7a7a\u95f4, \u51fd\u6570\u8c03\u7528\u7ed3\u675f\u540e\u81ea\u52a8\u91ca\u653e, \u800cstatic\u5206\u914d\u5728\u9759\u6001\u5b58\u50a8\u533a, \u5728\u7a0b\u5e8f\u6574\u4e2a\u8fd0\u884c\u671f\u95f4\u90fd\u4e0d\u91ca\u653e. \u4e24\u8005\u4e4b\u95f4\u7684\u4f5c\u7528\u57df(\u6709\u6548\u8303\u56f4)\u76f8\u540c, \u4f46\u751f\u5b58\u671f\u4e0d\u540c.
2. static\u5c40\u90e8\u53d8\u91cf\u5728\u6240\u5904\u6a21\u5757\u5728\u521d\u6b21\u8fd0\u884c\u65f6\u8fdb\u884c\u521d\u59cb\u5316\u5de5\u4f5c, \u4e14\u53ea\u64cd\u4f5c\u4e00\u6b21\u3002
3. \u5bf9\u4e8e\u5c40\u90e8\u9759\u6001\u53d8\u91cf, \u5982\u679c\u4e0d\u8d4b\u521d\u503c, \u7f16\u8bd1\u671f\u4f1a\u81ea\u52a8\u8d4b\u521d\u503c0\u6216\u7a7a\u5b57\u7b26, \u800cauto\u7c7b\u578b\u7684\u521d\u503c\u662f\u4e0d\u786e\u5b9a\u7684.
\u7279\u70b9: static\u5c40\u90e8\u53d8\u91cf\u7684\u201d\u8bb0\u5fc6\u6027\u201d\u4e0e\u751f\u5b58\u671f\u7684\u201d\u5168\u5c40\u6027\u201d
\u6240\u8c13\u201d\u8bb0\u5fc6\u6027\u201d\u662f\u6307\u5728\u4e24\u6b21\u51fd\u6570\u8c03\u7528\u65f6, \u5728\u7b2c\u4e8c\u6b21\u8c03\u7528\u8fdb\u5165\u65f6, \u80fd\u4fdd\u6301\u7b2c\u4e00\u6b21\u8c03\u7528\u9000\u51fa\u65f6\u7684\u503c.

\u6ce8\u610f\u4e8b\u9879:
1. \u201c\u8bb0\u5fc6\u6027\u201d, \u7a0b\u5e8f\u8fd0\u884c\u5f88\u91cd\u8981\u7684\u4e00\u70b9\u5c31\u662f\u53ef\u91cd\u590d\u6027, \u800cstatic\u53d8\u91cf\u7684\u201d\u8bb0\u5fc6\u6027\u201d\u7834\u574f\u4e86\u8fd9\u79cd\u53ef\u91cd\u590d\u6027, \u9020\u6210\u4e0d\u540c\u65f6\u523b\u81f3\u8fd0\u884c\u7684\u7ed3\u679c\u53ef\u80fd\u4e0d\u540c.
2. \u201c\u751f\u5b58\u671f\u201d\u5168\u5c40\u6027\u548c\u552f\u4e00\u6027. \u666e\u901a\u7684local\u53d8\u91cf\u7684\u5b58\u50a8\u7a7a\u95f4\u5206\u914d\u5728stack\u4e0a, \u56e0\u6b64\u6bcf\u6b21\u8c03\u7528\u51fd\u6570\u65f6, \u5206\u914d\u7684\u7a7a\u95f4\u90fd\u53ef\u80fd\u4e0d\u4e00\u6837, \u800cstatic\u5177\u6709\u5168\u5c40\u552f\u4e00\u6027\u7684\u7279\u70b9, \u6bcf\u6b21\u8c03\u7528\u65f6, \u90fd\u6307\u5411\u540c\u4e00\u5757\u5185\u5b58, \u8fd9\u5c31\u9020\u6210\u4e00\u4e2a\u5f88\u91cd\u8981\u7684\u95ee\u9898 ---- \u4e0d\u53ef\u91cd\u5165\u6027!!!

1\u3001auto\u53d8\u91cf\uff1a
\u51fd\u6570\u4e2d\u7684\u5c40\u90e8\u53d8\u91cf\uff0c\u5982\u4e0d\u4e13\u95e8\u58f0\u660e\u4e3astatic\u5b58\u50a8\u7c7b\u522b\uff0c\u90fd\u662f\u52a8\u6001\u5206\u914d\u5b58\u50a8\u7a7a\u95f4\u7684\uff0c\u6570\u636e\u5b58\u50a8\u5728\u52a8\u6001\u5b58\u50a8\u533a\u3002\u5728\u8c03\u7528\u8be5\u51fd\u6570\u65f6\u7cfb\u7edf\u4f1a\u7ed9\u5b83\u4eec\u5206\u914d\u5b58\u50a8\u7a7a\u95f4\uff0c\u5728\u51fd\u6570\u8c03\u7528\u7ed3\u675f\u65f6\u5c31\u81ea\u52a8\u91ca\u653e\u8fd9\u4e9b\u5b58\u50a8\u7a7a\u95f4\u3002\u8fd9\u7c7b\u5c40\u90e8\u53d8\u91cf\u79f0\u4e3a\u81ea\u52a8\u53d8\u91cf\u3002\u81ea\u52a8\u53d8\u91cf\u7528\u5173\u952e\u5b57auto\u4f5c\u5b58\u50a8\u7c7b\u522b\u7684\u58f0\u660e\u3002\u5982:
int f(int a)
{
auto int b,c=3
}
\u5b9e\u9645\u4e0a\uff0c\u5173\u952e\u5b57auto\u53ef\u4ee5\u7701\u7565\uff0cauto\u4e0d\u5199\u5219\u9690\u542b\u786e\u5b9a\u4e3a\u201d\u81ea\u52a8\u5b58\u50a8\u7c7b\u522b\u201c\uff0c\u5b83\u5c5e\u4e8e\u52a8\u6001\u5b58\u50a8\u65b9\u5f0f\u3002\u7a0b\u5e8f\u4e2d\u5927\u591a\u6570\u53d8\u91cf\u5c5e\u4e8e\u81ea\u52a8\u53d8\u91cf\u3002
2\u3001register\u53d8\u91cf
\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u53d8\u91cf\u7684\u503c\u662f\u5b58\u653e\u5728\u5185\u5b58\u4e2d\u7684\u3002\u5f53\u7a0b\u5e8f\u4e2d\u7528\u5230\u54ea\u4e00\u4e2a\u53d8\u91cf\u7684\u503c\u65f6\uff0c\u7531\u63a7\u5236\u5668\u53d1\u51fa\u6307\u4ee4\u5c06\u5185\u5b58\u4e2d\u8be5\u53d8\u91cf\u7684\u503c\u9001\u5230\u8fd0\u7b97\u5668\u4e2d\u3002\u7ecf\u8fc7\u8fd0\u7b97\u5668\u8fdb\u884c\u8fd0\u7b97\uff0c\u5982\u679c\u9700\u8981\u5b58\u6570\uff0c\u518d\u4ece\u8fd0\u7b97\u5668\u5c06\u6570\u9001\u5230\u5185\u5b58\u5b58\u653e\u3002\u5982\u679c\u6709\u4e00\u4e9b\u53d8\u91cf\u4f7f\u7528\u9891\u7e41\uff0c\u5219\u4e3a\u5b58\u53d6\u53d8\u91cf\u7684\u503c\u8981\u82b1\u4e0d\u5c11\u65f6\u95f4\u3002\u4e3a\u63d0\u9ad8\u6267\u884c\u6548\u7387\uff0cC\u8bed\u8a00\u5141\u8bb8\u5c06\u5c40\u90e8\u53d8\u91cf\u7684\u503c\u653e\u5728CPU\u4e2d\u7684\u5bc4\u5b58\u5668\u4e2d\uff0c\u9700\u8981\u7528\u65f6\u76f4\u63a5\u4ece\u5bc4\u5b58\u5668\u53d6\u51fa\u53c2\u52a0\u8fd0\u7b97\uff0c\u4e0d\u5fc5\u518d\u5230\u5185\u5b58\u4e2d\u53bb\u5b58\u53d6\u3002\u7531\u4e8e\u5bc4\u5b58\u5668\u7684\u5b58\u53d6\u901f\u5ea6\u8fdc\u9ad8\u4e8e\u5185\u5b58\u7684\u5b58\u53d6\u901f\u5ea6\uff0c\u56e0\u6b64\u8fd9\u6837\u53ef\u4ee5\u63d0\u9ad8\u6267\u884c\u6548\u7387\u3002\u8fd9\u79cd\u53d8\u91cf\u53eb\u505a\u201d\u5bc4\u5b58\u5668\u53d8\u91cf\u201c\uff0c\u7528\u5173\u952e\u5b57register\u4f5c\u58f0\u660e\u3002\u5982\uff1a
int fac(int n)
{
register int i,f=1;
}
register\u53d8\u91cf\u7684\u8bf4\u660e\uff1a
1)\u53ea\u6709\u5c40\u90e8\u81ea\u52a8\u53d8\u91cf\u548c\u5f62\u5f0f\u53c2\u6570\u53ef\u4ee5\u4f5c\u4e3a\u5bc4\u5b58\u5668\u53d8\u91cf\uff0c\u5176\u4ed6\u4e0d\u884c\u3002
2)\u4e00\u4e2a\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e2d\u7684\u5bc4\u5b58\u5668\u6570\u76ee\u662f\u6709\u9650\u7684\uff0c\u4e0d\u80fd\u5b9a\u4e49\u4efb\u610f\u591a\u4e2a\u5bc4\u5b58\u5668\u53d8\u91cf\u3002\u4e0d\u540c\u7684\u7cfb\u7edf\u5141\u8bb8\u4f7f\u7528\u7684\u5bc4\u5b58\u5668\u662f\u4e0d\u540c\u7684\uff0c\u800c\u4e14\u5bf9register\u53d8\u91cf\u7684\u5904\u7406\u65b9\u6cd5\u4e5f\u662f\u4e0d\u540c\u7684\uff0c\u6709\u7684\u7cfb\u7edf\u5bf9register\u53d8\u91cf\u5f53\u4f5c\u81ea\u52a8\u53d8\u91cf\u5904\u7406\uff0c\u5206\u914d\u5185\u5b58\u5355\u5143\uff0c\u5e76\u4e0d\u771f\u6b63\u628a\u5b83\u4eec\u5b58\u653e\u5728\u5bc4\u5b58\u5668\u4e2d\uff0c\u6709\u7684\u7cfb\u7edf\u53ea\u5141\u8bb8\u5c06int\u3001char\u548c\u6307\u9488\u578b\u53d8\u91cf\u5b9a\u4e49\u4e3a\u5bc4\u5b58\u5668\u53d8\u91cf\u3002
3)\u5c40\u90e8\u9759\u6001\u53d8\u91cf\u4e0d\u80fd\u5b9a\u4e49\u4e3a\u5bc4\u5b58\u5668\u53d8\u91cf\u3002\u5982\uff1aregister static int a;\u662f\u9519\u8bef\u3002
4)\u5f53\u4eca\u7684\u4f18\u5316\u7f16\u8bd1\u7cfb\u7edf\u80fd\u591f\u81ea\u52a8\u8bc6\u522b\u4f7f\u7528\u9891\u7e41\u7684\u53d8\u91cf\uff0c\u4ece\u800c\u81ea\u52a8\u5730\u5c06\u8fd9\u4e9b\u53d8\u91cf\u653e\u5728\u5bc4\u5b58\u5668\u4e2d\uff0c\u800c\u4e0d\u9700\u8981\u7a0b\u5e8f\u8bbe\u8ba1\u8005\u6307\u5b9a\u3002\u56e0\u6b64\u5728\u5b9e\u9645\u4e0a\u7528register\u58f0\u660e\u53d8\u91cf\u662f\u4e0d\u5fc5\u8981\u7684\u3002

自动变量(auto变量)和静态变量(static变量)主要有以下几点区别:

1、static变量存放在静态存储区,在程序整个运行期间都不释放;而auto变量存放在动态存储区,随着生命周期的结束而立即释放。


2、static变量只赋值一次,以后就不用赋值;而auto变量在函数每调用一次都要赋初值。


3、如果用户不对static变量赋初值,则默认为0或'\0';而auto变量为不确定值。

扩展资料:

auto变量

自动变量(Automatic Variable)指的是局部作用域变量,具体来说即是在控制流进入变量作用域时系统自动为其分配存储空间,并在离开作用域时释放空间的一类变量。

在许多程序语言中,自动变量与术语“局部变量”(Local Variable)所指的变量实际上是同一种变量,所以通常情况下“自动变量”与“局部变量”是同义的。

参考资料来源:百度百科-自动变量



一、主体不同

1、auto变量:是一个C/C++语言存储类型,仅在语句块内部使用。

2、static变量:在计算机编程领域指在程序执行前系统就为之静态分配存储空间的一类变量。

二、作用域范围不同

1、auto变量:初始化可为任何表达式,其特点是当执行流程进入该语句块的时候初始化可为任何表达式。

2、static变量:针对某一源文件的以static声明的文件级变量与函数的作用域只限于文件内(只在文件内可见),也即“内部连接”,因而可以用来限定变量的作用域。


三、特点不同

1、auto变量:具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。

2、static变量:在函数内以static声明的变量虽然与自动局部变量的作用域相同,但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同。


参考资料来源:百度百科-静态变量

参考资料来源:百度百科-auto



1、存储部位不同

auto变量会存储在堆栈里面,每次定义的时候会分配存储区,而在用完释放的时候会收回存储区。

static变量会被存储在静态存储区。

2、初始化不同

初始化的时候,如果不赋初值,auto变量是不确定的。C默认的就是auto类型。static变量声明的时候,如果不初始化,编译器会自动初始化。

3、保留的数据不同

static 变量,每次使用的时候会保留上一次的值,即使重新定义,也不会改变static 变量的值。而auto变量不会。

扩展资料

static变量用途

1、作常量使用

静态变量也可以用于存储常数。具体来说,静态变量(全局变量及汇编语言里定义的符号亦同)可用const,constant或final(根据语言决定)等关键字标识,这时其值就会在编译时设定,并且无法在运行时改变。

编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区;而如若有需要,有些编译器还可选择为其开辟专用区;为防止常数变量被错误的指针写入覆盖,亦可在这块区域启用内存保护机制。

2、C族语言中的实现

在C语言及由其派生出的C++与Objective-C等程序语言中,“static”是用于控制变量的生命周期和连接方式(即其作用域,亦即可见性)的保留字。

确切来说,正如C族语言中的extern,auto与register这些保留字一样,static也是一种存储类(此处的“类”与面向对象语言的“类”的定义不同)标识。

每个变量与函数都有以上的一种存储类标识,如果在声明中没有明确标识其存储类,编译时就会根据上下文来选择其默认存储类,如在源文件里的所有文件级变量对应的默认存储类是extern,而在函数体内的变量对应的则是auto,各存储类的属性如下表所列。

参考资料来源:百度百科-静态变量



自动变量(auto变量)和静态变量(static变量)主要有以下几点区别:
1、static变量存放在静态存储区,在程序整个运行期间都不释放;而auto变量存放在动态存储区,随着生命周期的结束而立即释放。
2、static变量只赋值一次,以后就不用赋值;而auto变量在函数每调用一次都要赋初值。
3、如果用户不对static变量赋初值,则默认为0或'\0';而auto变量为不确定值。

auto变量存储在动态存储区,static变量存储在静态存储区,主要区别是:在多次使用被调函数中,每执行一次,auto的值都保留原始值(与你的程序执行没关系),但是static却和调用函数的具体过程有关,即保留上次的值,两者在主函数中的功能是一样的。

  • 姹c璇█涓璼tatic鐨勭敤娉,浠涔堟椂鍊欏畾涔夎鍔犱笂浠栧晩?
    绛旓細static int n; //瀹氫箟闈欐佸叏灞鍙橀噺 鏀逛负int n; //瀹氫箟鍏ㄥ眬鍙橀噺 鍐嶆缂栬瘧杩愯绋嬪簭,缁嗗績浣撲細鍏ㄥ眬鍙橀噺鍜闈欐佸叏灞鍙橀噺鐨勫尯鍒 2銆侀潤鎬佸眬閮ㄥ彉閲 鍦ㄥ眬閮ㄥ彉閲忓墠,鍔犱笂鍏抽敭瀛梥tatic,璇ュ彉閲忓氨琚畾涔夋垚涓轰竴涓潤鎬佸眬閮ㄥ彉閲忋 鎴戜滑鍏堜妇涓涓潤鎬佸眬閮ㄥ彉閲忕殑渚嬪瓙,濡備笅: //Example 3#include <iostream.h>void fn();void main...
  • c璇█涓,灏sta涓殑绗琺涓瓧绗﹀紑濮嬬殑n涓瓧绗﹀弽杞瓨鍏tb涓
    绛旓細include<stdio.h>int main(){ char sta[100],stb[100]; int m,n; // 鍋囧畾sta,stb,m,n宸茬粡璧嬪硷紝骞朵笖 m+n涓嶈秴杩100 int i; for(i=0;i<m;i++){ stb[i]=sta[i]; } for(i;i<m+n;i++){ stb[i]=sta[m+n-1-(i-m)]; } for(i;i<...
  • C璇█鏁扮粍鍙橀噺鍒ゆ柇
    绛旓細閭d箞鍏堟潵璁蹭笅濡備綍杞崲鎴恑nt,stA[]涓畾涔夌殑鎴愬憳鏄痠nt绫诲瀷,鎵浠ヨ繖浜涘厓绱犲搴旂殑鏁板煎叾瀹炴槸ASCII琛ㄤ腑鐨勬暟鍊,閭d箞鏌ョ湅ASCII琛ㄥ彲浠ョ煡閬,'0'瀵瑰簲鐨勬暟鍊兼槸48,姣斿'1' - 48 灏辩瓑浜1,鎵浠ヨ繖涓椂鍊欏啀鍒皌able涓幓鍙栧,灏辫兘寰楀埌浣犻渶瑕佺殑涓滆タ浜,鐢ㄤ竴涓惊鐜氨鑳借В鍐,濡備笅:for (i = 0; i < 6; ++i){ stB[...
  • sta^6鍦51鍗曠墖鏈c璇█璁虹紪绋嬩腑鏄粈涔堟剰鎬,璇疯鐨勮缁嗕竴鐐广傝阿璋 /*...
    绛旓細绗竴琛屾槸瀹氫箟涓涓彲浠ヤ綅瀵诲潃鍙橀噺 鍚庝笁琛屽氨鏄繖涓綅瀵诲潃鍙橀噺涓殑姣忎綅瀹氫箟鍔熻兘
  • C璇█棰樼洰 #include <stdio.h> void ch(int *a,int *b) { int c; c...
    绛旓細18.鐜板凡瀹氫箟鏁村瀷鍙橀噺int i=1; 鎵ц寰幆璇彞鈥渨hile(i++5);鈥濆悗,i鐨勫间负( )銆侫)1B)5C)6D)浠ヤ笂涓変釜绛旀鍧囦笉姝g‘19.浠ヤ笅绋嬪簭鐨勮緭鍑虹粨鏋滄槸( )銆俶ain(){int a=0,j;for(j=0;j4;j++){switch(j){case 0:case 3:a+=2;case 1:case 2:a+=3;default:a+=5;}}printf("%d\n",a);}A)20...
  • 鐢C璇█瀹炵幇鎷︽埅瀵煎脊闂鎴栫粰鍑虹畻娉
    绛旓細int func(int*a,int n,long sta){ int k,func=0;long high=999999;char b;if(sta>0)for(k=0;k<n;k++){ b=sta%2;sta/=2;if(!b)continue;if(a[k]>=high)break;func++;high=a[k];} return func;} int main(){ int num,h,i=0,hit=0,HIT=0,temp=0;int high[N]={...
  • 姹傛暀鎳c璇█鐨澶х浠,浠ヤ笅浠g爜鏈変綍闂
    绛旓細鐢╯canf璇诲彇double绫诲瀷鐨鍙橀噺瑕佺敤%lf銆俿canf("%lf,%lf,%lf",&a,&b,&c);鍙﹀锛岀敤printf杈撳嚭double绫诲瀷鐨勫彉閲忎篃瑕佺敤%lf 璇曡瘯
  • 鎬!C璇█闂,澶у甯繖.
    绛旓細sb_fu *Fu_sta[8];鏍规湰娌℃湁缁欐瘡涓寚閽堝垎閰嶅唴瀛!涓嬮潰鐨勬槸浣跨敤鏂瑰紡,浣嗘槸涓嶅缓璁繖鏍蜂娇鐢.include<stdio.h> include <malloc.h> define N 8 typedef struct scorebore_fu { int opcode;int dreg;int qr;} sb_fu;sb_fu* Fu_sta[N];int main(){ int i = 0;for (i = 0; i < N; i+...
  • C璇█ #define OC_I2C_STA (1<<6) 鎷彿閲岀殑鍐呭琛ㄧず浠涔
    绛旓細1<<6 c 鐨勭Щ浣嶈繍绠 << 鏄乏绉, >> 鏄彸绉 宸︾Щ鐩稿綋浜庝箻浠 2 鍙崇Щ鐩稿綋浜庨櫎浠 2 绉讳綅杩愮畻鐨勬晥鐜囨瘮 涔樻硶闄ゆ硶楂 1<<6 灏辨槸灏 1 宸︾Щ6 浣 灏辨槸 64
  • 涓涓鍏充簬c璇█鐨勯棶棰
    绛旓細绮楃暐鐨勭湅浜嗕竴涓嬶紝浣犵殑ch[2]鍙槸鐢ㄦ潵瀛樺偍yYnN涓涓瓧绗︼紝鍏跺疄瀹氫箟char ch灏卞彲浠ヤ簡锛屼笉鐢ㄦ暟缁 鐒跺悗scanf("%c", &ch);while姣旇緝鐨勬椂鍊欑洿鎺h == 'Y' || ch == 'y'灏卞畬浜 SIGSEGV鏄浣犺秺鐣岃闂唴瀛 濡傛灉涓嶆槸杩欎釜闂鐨勮瘽锛屽氨鐪嬩竴涓嬩綘sta[]鐨勬暟缁勬湁娌℃湁鍑虹幇瓒婄晫鎯呭喌 ...
  • 扩展阅读:auto一闪一闪怎么解决 ... 1st person auto aim ... c++ auto头文件 ... c语言auto变量怎么用 ... auto是空调还是暖风 ... c语言auto的用法 ... auto变量和static变量 ... 安卓auto支持哪些应用 ... 视频auto什么意思 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网