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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C语言——数组、函数、指针

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

C語言——數(shù)組、函數(shù)、指針


宗旨:技術(shù)的學習是有限的,分享的精神是無限的。


1、有什么作用?為什么要使用它們?

(1)數(shù)組:提供一段連續(xù)的存儲空間,存數(shù)據(jù)和字符串很方便;

(2)函數(shù):模塊化程序的設(shè)計(返回值和參數(shù));

(3)指針:使用靈活;

?

2、數(shù)組的內(nèi)存布局

【數(shù)組和鏈表區(qū)別:數(shù)組順序存儲,大小固定;鏈表隨機存儲,大小不定。】

int a[5];?--- a作為右值時,代表數(shù)組首元素的首地址,而非數(shù)組的首地址

//分配了20字節(jié)的空間名字為a, a[0], a[1]為a的元素,并非元素的名字。只給數(shù)組取名,沒給元素取名。

sizeof(a) ??--- ?sizeof(int) * 5 ?---?20

sizeof(a[0])?--- ?sizeof(int) ?--- ?4

sizeof(a[5])?--- ?sizeof(int) ?--- ?4 ? 并沒出錯,關(guān)鍵字求值是在編譯的時候,雖不存在a[5],但這里并未真正訪問a[5]。

sizeof(&a[0])--- ?4

sizeof(&a)--- ?4

&a[0]和&a ----?&a[0]代表數(shù)組首元素的首地址,&a是數(shù)組的首地址;值一樣,意義不同。

?

? 右值:出現(xiàn)在“=”右邊的值; 左值:出現(xiàn)在“=”左邊的值。

? a不能作為左值

初始化數(shù)組:memset(a,0, sizeof(a)); // 初始化為0

?

3、指針數(shù)組/數(shù)組指針,指針函數(shù)/函數(shù)指針

指針數(shù)組:int*a[10]; ? --- 實質(zhì)就是個數(shù)組,只不過數(shù)組里面的元素全是指針。

數(shù)組指針:int(*a)[10]; --- 實質(zhì)就是個指針,指向一個數(shù)組。

指針函數(shù):int*a(int b, int c); ?--- 這就是個普通的函數(shù),只不過返回值是int*類型的。

函數(shù)指針:int(*a)(int b, int c); --- a是個函數(shù)指針,指向一個函數(shù),b,c是函數(shù)的參數(shù),返回值為int【a = fun;】。

【typedefint (*potion_t)(int a, int b) --- potion_t相當于一個類型,可以直接用potion_t定義一個變量,只不過這個變量指向一個函數(shù)】

?

4、值傳遞和地址傳遞

值傳遞過程中,被調(diào)函數(shù)的形參作為被調(diào)函數(shù)的局部變量處理,即在內(nèi)存的棧中開辟空間以存放由主調(diào)函數(shù)放進來的實參的值,從而成為了實參的一個拷貝。值傳遞的特點是被調(diào)函數(shù)對形參的任何操作都是作為局部變量進行,不會影響主調(diào)函數(shù)的實參變量的值。

而在地址傳遞過程中,被調(diào)函數(shù)的形參雖然也作為局部變量在堆棧中開辟了內(nèi)存空間,但是這時存放的是由主調(diào)函數(shù)放進來的實參變量的地址。被調(diào)函數(shù)對形參的任何操作都被處理成間接尋址,即通過堆棧中存放的地址訪問主調(diào)函數(shù)中的實參變量。正因為如此,被調(diào)函數(shù)對形參做的任何操作都影響了主調(diào)函數(shù)中的實參變量。

?

5、菜單界面的設(shè)計

菜單一-- 菜單二-- 菜單三-- 菜單四-- 菜單

? /* 將菜單的屬性和操作“封裝”在一起 */?

#define MENUNUM 10; typedef struct tag_sysmenu {char *text; /* 菜單的文本 */char xpos; /* 菜單在LCD上的X坐標 */char ypos; /* 菜單在LCD上的Y坐標 */void (*on_ok_fun)(); /* 在該菜單上按下OK鍵的處理函數(shù) */void (*on_cancel_fun)(); /* 在該菜單上按下cancel鍵的處理函數(shù) */ } sys_menu_t, *lpsys_menu_t;static sys_menu_t menu[MENUNUM] = {{"menu1", 0, 48, menu1on_ok, nemu1on_cancel},{"menu2", 7, 48, menu2on_ok, nemu2on_cancel},{"menu3", 7, 48, menu3on_ok, nemu3on_cancel},{"menu4", 7, 48, menu4on_ok, nemu4on_cancel}... };

? OK和Cancel鍵的處理變成:

void onok_key() {menu[currentFocusMenu].on_ok_fun(); } void on_cancel_key() {menu[currentFocusMenu].on_cancel_fun(); }

?

總結(jié)

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

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