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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言enum(枚举)、指针、函数指针

發(fā)布時間:2024/9/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言enum(枚举)、指针、函数指针 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • C enum(枚舉)

枚舉是c語言中的一種數(shù)據(jù)類型,定義格式為

enum 枚舉名{枚舉元素1,枚舉元素2......};

用#define定義一星期七天,就要為每個整數(shù)定義一個別名

#define MON 1 #define TUE 2 #define WED 3 #define THU 4 #define FRI 5 #define SAT 6 #define sun 7

用枚舉的方式定義一星期七天

enum DAY {MON=1, TUE, WED, THU, FRI, SAT, SUN };

第一個枚舉成員的默認(rèn)值為整型的0,后續(xù)枚舉成員的值在前一個成員上加1

可以在定義枚舉類型時改變枚舉元素的值

enum season {spring, summer=3, autumn, winter};

spring的值為0,summer的值為3,autumn的值為4

枚舉變量的定義

  • 先定義枚舉類型,再定義枚舉變量
  • enum DAY {MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day;
  • 定義枚舉類型的同時定義枚舉變量
  • enum DAY {MON=1, TUE, WED, THU, FRI, SAT, SUN } day;
  • 省略枚舉名稱,直接定義枚舉變量
  • enum {MON=1, TUE, WED, THU, FRI, SAT, SUN } day;

    在C語言中枚舉是被當(dāng)作int或者unsigned int 類型處理

    枚舉類型必須連續(xù)才可以實現(xiàn)有條件的遍歷

    #include<stdio.h>enum DAY {MON=1, TUE, WED, THU, FRI, SAT, SUN } day;int mian() {for (day = MON; day <= SUN; day++){printf("枚舉元素:%d\n",day);} }

    以上輸出結(jié)果為

    枚舉元素:1 枚舉元素:2 枚舉元素:3 枚舉元素:4 枚舉元素:5 枚舉元素:6 枚舉元素:7

    枚舉在switch中的使用

    #include<stdio.h> #include<stdlib.h> int mian() {enum color { red=1; green; blue };enum color favorite_color;printf("請輸入你喜歡的顏色:(1.red,2.green,3.blue):");scanf("%d",&favorite_color);switch(favorite_color){case red:printf("你喜歡的顏色是紅色");break;case green:printf("你喜歡的顏色是綠色");break;case blue:printf("你喜歡的顏色是藍(lán)色");break;default:printf("你沒有選擇你喜歡的顏色");}return 0; }

    將整數(shù)轉(zhuǎn)換為枚舉

    #include<stdio.h> #include<stdlib.h>int main() {enum day{MON, TUE, WED, THU, FRI, SAT, SUN}workday;int a=1;enum day weekend;weekend = ( enum day ) a; //類型轉(zhuǎn)換 printf("weekend:%d",weekend);return 0; }
    • C指針

    指針是一個變量,其值為另一個變量的地址,即內(nèi)存位置的直接地址

    所有的實際數(shù)據(jù)類型,不管是整型、浮點型,還是其他的數(shù)據(jù)類型,對應(yīng)指針的值的類型都是一樣的,都是一個代表內(nèi)存地址的長的十六進制數(shù)

    不同數(shù)據(jù)類型的指針之間唯一的不同是,指針?biāo)傅淖兞炕虺A康臄?shù)據(jù)類型不同

    #include<stdio.h>int main() {int var = 20;int *ip;ip = &var; /* 在指針變量中存儲var的地址 */printf("Adress of var variable : %p\n",&var);/* 在指針變量中存儲的地址 */printf("Adress stored in ip variable : %p\n",ip);/* 使用指針訪問值 */printf("Value of *ip variable : %d\n",*ip);return 0; }

    編譯執(zhí)行后,結(jié)果為

    Adress of var variable : bffd8b3c Adress stored in ip variable : bffd8b3c Value of *ip variable : 20
    • C中的NULL指針
      在聲明變量的時候,如果沒有確切的地址可以賦值,為指針變量賦一個NULL值是一個好習(xí)慣。賦值NULL值的指針被稱為空指針

    NULL指針是一個定義在標(biāo)準(zhǔn)庫中的值為零的常量

    #include<stdio.h>int main() {int *ptr = NULL;printf("ptr的地址是:%p\n",ptr);return 0; }

    編譯執(zhí)行后

    ptr的地址是:0x0

    在大多數(shù)操作系統(tǒng)上,程序不允許訪問地址為0的內(nèi)存,因為該內(nèi)存是操作系統(tǒng)保留的。然而,內(nèi)存地址0有特別重要的意義,它表明該指針不指向一個可訪問的內(nèi)存位置。但照慣例,如果指針包含空值(零值),則假定它不指向任何東西

    檢查一個空指針,可以用if語句

    if(ptr) /* 如果p非空,則完成 */ if(!ptr) /* 如果p為空,則完成 */

    遞增一個指針
    使用指針代替數(shù)組,因為變量指針可以遞增,而數(shù)組不能,數(shù)組可以看成一個指針變量

    #include<stdio.h> const MAX = 3;int main() {int var[] = {100,10,200};int i, *ptr;ptr = var; //指針中的數(shù)組地址for ( i=0; i<MAX; i++){printf("存儲地址:var[%d] = %x\n",i,ptr);printf("存儲值:var[%d] = %d\n",i,*ptr);ptr++;}return 0; }

    遞減一個指針
    對指針進行遞減運算,即把值減去其數(shù)據(jù)類型的字節(jié)數(shù),如下所示:

    #include<stdio.h>const int MAX = 3; int main() {int var[]={10,100,200};int i,*ptr;ptr = &var[MAX-1]; // 指針中最后一個元素的地址for (i=MAX; i>0; i--){printf("存儲地址:var[%d] = %x\n",i-1,ptr);printf("存儲值:var[%d] = %d\n",i-1.*ptr);ptr--;}return 0; }
    • 指針的比較
      只要變量指針?biāo)赶虻牡刂沸∮诨虻扔跀?shù)組的最后一個元素的地址&var[MAX-1],則把變量指針進行遞增
    #include<stdio.h>int const MAX = 3; int main() {int var[]={10,100,200};int i,*ptr;ptr = var;i = 0;while( ptr<=&var[MAX-1] ){printf("Adress of var[%d] = %x\n",i,ptr);printf("value of var[%d] = %d\n",i,*ptr);ptr++;i++;}return 0; }
    • C指向指針的指針
      指向指針的指針是一種多級間接尋址的形式,或者說是一個指針鏈。通常,一個指針包含一個變量的地址。當(dāng)我們定義一個指向指針的指針時,第一個指針包含了第二個指針的地址,第二個指針指向包含實際值的位置

    • C傳遞指針給函數(shù)
      傳遞一個無符號的long型指針給函數(shù),并在函數(shù)內(nèi)改變這個值:

    #include<stdio.h> #include<time.h>void getSeconds(unsigned long *ptr)int main() {unsigned long sec;getSeconds(&sec);printf("Number of seconds:%ld\n",sec);return 0; }void getSeconds(unsigned long *ptr) {*ptr=time(NULL); //獲取當(dāng)前的秒數(shù)return; }

    能夠接收指針作為參數(shù)的函數(shù),也能接收數(shù)組作為參數(shù)

    #include<stdio.h> double getAverage(int *arr,int size);int main() {int balance[5]={1000,2,3,17,50);double avg;avg = getAverage(balance,5); //傳遞一個指向數(shù)組的指針作為參數(shù)printf("Average value is:%f\n".avg);return 0; }double getAverage(int *arr,int size) {int i,sum=0;double avg;for (i=0; i<size; ++i){sum += arr[i];}avg = (double)sum/size;return avg; }
    • C函數(shù)指針

    函數(shù)指針是指向函數(shù)的指針變量
    函數(shù)指針可以像一般函數(shù)一樣,用于調(diào)用函數(shù)、傳遞參數(shù)
    函數(shù)指針變量的聲明:

    typedef int (*fun_ptr)(int,int); //聲明一個指向同樣參數(shù)、返回值的函數(shù)指針類型

    一下實例聲明了函數(shù)指針變量p,指向函數(shù)max:

    #include<stdio.h>int max(int x,int y) {return x > y ? x : y; }int main(void) {int(*p)(int,int) = &max; //&可以省略int a,b,c,d;printf("Please enter three numbers:");scanf("%d%d%d",&a&b&c);/* 與直接調(diào)用函數(shù)等價,d=max(max(a,b),c) */d = p(p(a,b),c);printf("max is:%d\n",d);return 0; }
    • 回調(diào)函數(shù)
      函數(shù)指針作為某個函數(shù)的參數(shù)
      函數(shù)指針變量可以作為某個函數(shù)的參數(shù)來使用的,回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)

    實例中populate_array函數(shù)定義了三個參數(shù),其中第三個參數(shù)是函數(shù)的指針,通過該函數(shù)來設(shè)置數(shù)組的值

    實例中定義了回調(diào)函數(shù)getNextRandomValue,它返回一個隨機值,它作為一個函數(shù)指針傳遞給populate_array函數(shù)

    populate_array將調(diào)用10次回調(diào)函數(shù),并將回調(diào)函數(shù)的返回值賦值給數(shù)組

    #include<stdio.h> #include<stdlib.h>//回調(diào)函數(shù) void populate_array(int *array, size_t arraySize, int (*getNextValue)(void)) {for (size_t i=0; i<arraySize; i++)array[i]=getNextValue(); }//獲取隨機值 int getNextRandomValue(void) {return rand(); }int main(void) {int myarray[10];populate_array(myarray, 10, getNextRandomValue);for(int i = 0; i<10; i++){printf("%d",myarray[i]);}printf("\n");return 0; }

    總結(jié)

    以上是生活随笔為你收集整理的C语言enum(枚举)、指针、函数指针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 男人操女人的网站 | 免费看av网 | 国产调教视频在线观看 | 中文在线第一页 | 在线碰 | 国产成人精品123区免费视频 | 不卡影院| 巨乳xxx| 天天操天天操天天操天天 | 少妇aaaaa| 国产亚洲精品av | 日本亲子乱子伦xxxx | 人人爽人人爽人人 | 国产自在线拍 | 国产精品夜夜躁视频 | 少妇又色又爽又高潮极品 | 国产成人啪精品 | 欧美一区二区视频免费观看 | 一区二区日韩欧美 | 调教一区二区三区 | 欧美高清性xxxxhdvideosex | 欧美一级色片 | 91丨porny丨对白 | jizz在线看 | 韩国一区二区在线观看 | 国产在线观看无码免费视频 | 国产成人精品综合久久久久99 | 黑料网在线观看 | 综合五月 | 男女天堂av| 福利片一区二区 | 91在线观看成人 | 久久二 | av久操| 亚洲综合在线中文字幕 | 欧美人与性动交α欧美片 | 青青草av| 久草高清视频 | 一区二区三区国产精品 | 亲子乱一区二区三区 | 成人蜜桃av | 亚洲最新视频 | 国产色视频一区二区三区qq号 | 曰本无码人妻丰满熟妇啪啪 | 国产18av| 69视频在线播放 | www.555国产精品免费 | 91精品国产综合久久国产大片 | 一区二区传媒有限公司 | 亚洲a视频 | 人与拘一级a毛片 | 亚洲五十路 | 午夜影院在线视频 | 国产色黄| 免费观看黄网站 | 欧美一级色 | 国产色中色 | 日韩精品电影网 | 那个网站可以看毛片 | 免费特黄视频 | 在线看成人av | 丁香花高清在线观看完整动漫 | 欧美性猛交xxxx黑人交 | 在线观看国产一区二区三区 | 韩国主播青草200vip视频 | 欧美精品999 | 国产欧美成人 | 99精品视频免费版的特色功能 | 亚洲人视频在线观看 | 国产精品手机在线 | 婷婷午夜天 | 国产欧美日韩专区发布 | melody在线高清免费观看 | 亚州视频在线 | 肉色超薄丝袜脚交一区二区图片 | 久久国产精品影视 | 成人高潮片免费网站 | 美足av | 淫片aaa| 五月天视频网站 | 最近最经典中文mv字幕 | 69视频在线播放 | 麻豆av毛片 | 欧美黑人多人双交 | 91精品亚洲一区 | 毛片a级片 | 国产特级片 | 综合色视频 | 日本少妇裸体做爰 | 国产欧美精品一区 | 午夜一级大片 | 天堂在线中文在线 | 香蕉久久精品日日躁夜夜躁 | 丰满少妇高潮在线观看 | 青青青草视频 | 伊人夜色 | 成人v片| 免费精品国产 | 午夜窝窝|