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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【C语言进阶深度学习记录】五 C语言中变量的属性

發布時間:2023/12/10 pytorch 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言进阶深度学习记录】五 C语言中变量的属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇文章學習了C語言中的類型轉換,點擊鏈接查看:【C語言進階深度學習記錄】四 C語言中的類型轉換.

文章目錄

    • 1 C語言的變量屬性
      • 1.1 auto關鍵字
      • 1.2 register關鍵字
      • 1.3 static 關鍵字
      • 1.4 代碼案例分析
      • 1.5 extern 關鍵字
      • 1.6 代碼案例分析
    • 2 總結

1 C語言的變量屬性

  • C語言中的變量可以有自己的屬性
  • 在定義變量的時候可以加上“屬性”關鍵字
  • 屬性關鍵字,指明變量的特有意義

上面的例子中給出了幾個屬性,下面對這些屬性做一些說明。

1.1 auto關鍵字

  • auto是C語言中局部變量的默認屬性
  • auto表明將被修飾的變量,存儲于棧上
  • 編譯器默認所有的局部變量都是auto的

如:

void f(){auto int i; //顯示指定i為auto屬性int j; //局部變量默認屬性是auto的 }

1.2 register關鍵字

  • register關鍵字指明將局部變量存儲于寄存器中
  • register只是請求將局部變量存儲于寄存器中,但是不一定能成功(畢竟寄存器很少)
  • register變量必須是CPU寄存器能夠接受的值
  • 不能用 & 運算符獲取register變量的地址

如:

#include <stdio.h>register int g_val; //errorint main(){register char var;printf("0x%08X", &var); //errorreturn 0; }

1.3 static 關鍵字

  • static關鍵字指明變量的“靜態屬性”

    • static 關鍵字修飾的局部變量存儲在程序靜態區,也就是數據區(data或bss)
  • static關鍵字同時具有“作用域限定符”的作用

    • static聲明的全局變量,作用域僅在聲明的文件中
    • static修飾的函數,作用域僅在聲明的文件中
# include <stdio.h>int g_val; //全局變量,可以在程序的任意位置訪問 static int g_sval; //靜態全局變量,只在當前文件中可以訪問 int main(){int var; // 局部變量,在棧上分配空間static int svar; // 靜態局部變量,在靜態數據區分配空間return 0; }

1.4 代碼案例分析

  • 代碼:5-1.c
#include <stdio.h>int f1() {int r = 0;r++;return r; }int f2() {static int r = 0;r++;return r; }int main() {auto int i = 0; // 顯示聲明 auto 屬性,i 為棧變量static int k = 0; // 局部變量 k 的存儲區位于靜態區,作用域位于 main 中register int j = 0; // 向編譯器申請將 j 存儲于寄存器中printf("%p\n", &i);printf("%p\n", &k);// printf("%p\n", &j); // errorfor(i=0; i<5; i++){printf("%d\n", f1());}for(i=0; i<5; i++){printf("%d\n", f2());}return 0; }
  • 編譯運行結果為(gcc 4.4.5):

可以看到:

  • i和k的地址不在一起,i在棧上,k咋數據區
  • 函數f1中,r為局部變量,每次調用該函數,r都是一個新的變量,每次都是0
  • 函數f2中,r為static變量,為靜態區的變量,在數據區中,所以一直存在,不會消失,每次調用f2函數,r的值都增加一。

1.5 extern 關鍵字

  • extern用于聲明外部定義的函數或者變量

    • extern變量在文件的其他地方分配空間
    • extern函數在文件的其他地方定義
  • extern “告訴”編譯器用C方式編譯源代碼(比如在C++語言中寫C語言代碼)

1.6 代碼案例分析

  • 5-2.c代碼
#include <stdio.h>extern int getI();int main() {printf("%d\n", getI());return 0; }
  • g.c
static int g_i;int getI() {return g_i; }
  • 編譯:gcc 5-2.c g.c -o lyy.out
  • 運行:.lyy.out

運行結果為0;

這個比較簡單就不做分析了

2 總結

  • auto變量存儲在棧中,局部變量的默認屬性
  • static變量存儲在程序的靜態區,也就是數據區
  • register請求變量存儲在CPU 寄存器中(不一定能請求成功)
  • extern變量在文件的其他地方分配存儲空間
  • extern能夠指示編譯器按照標準C的方式來編譯代碼
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【C语言进阶深度学习记录】五 C语言中变量的属性的全部內容,希望文章能夠幫你解決所遇到的問題。

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