日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言extern与static修饰变量

發布時間:2024/9/27 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言extern与static修饰变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

extern和static在C語言里面的作用這里就不做過多的闡述了,下面直接通過一個小程序來看一看他們修飾的變量的特性。

#include <stdio.h>int count = 3;int main() {int i = 0, count = 2, sum = 0;for (i = 0; i < count; i += 2, count++){static int count = 4;count++;if (i % 2 == 0){extern int count;count++;sum += count;}sum += count;}printf("%d %d\n", sum, count);system("pause");return 0; }

看到結果有沒有很驚訝,下面就來通過調試一步步分析出這個結果:

那么可以得出:此時count是main函數中for循環語句之前定義的局部變量

執行完40行的語句后,count變為4,說明此時的count為static修飾的count

這兒應該是vs2013的一個bug,因為extern修飾的變量必須是具有外部鏈接屬性的,也就是上面定義的全局的count,那么此時count的值應該為3(黃色箭頭在第45行,說明第44行執行結束,要開始執行第45行了),為什么我這么說呢

可以看到即使我執行了count++,count的值也沒有變化

而執行完sum+=count,sum的值是變成了4,而不是5(此時是執行到了48行,也就是要開始執行第48行,所以不要誤認為是把第二次sum+=count都已經執行了),此時的count值變成5也是正確的了,因為此時的count是static修飾的count(if語句里的extern修飾的count是一個局部變量,他的作用域是if語句),為什么這么確定,看一看接下來sum值得變化就知道了

因為變量具有局部優先性,所以這兒的count是static修飾的count,而不是全局的count或是for循環之上的count

接下來就很簡單了,i=2,此時的count=3,那么循環還是可以進去,再執行一次

此時i=4,count=4,二者值相等,所以不再進入循環,順序向下執行

所以sum最終為20,那么輸出sum為20,printf輸出語句輸出的count為4,是因為變量具有局部優先性,所以這兒的count是for循環上面的局部變量count,值為4

總結

以上是生活随笔為你收集整理的C语言extern与static修饰变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。