|
你先看我寫的代碼然后 再去理解你寫的就好理解了
定義一個整型數(shù)組 int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
定義一個返回值為空的想用數(shù)組做形參的函數(shù)
//void fun(int a[10])--------(才開始學(xué)c語言是的寫法)
//void fun(int a[]) ----------(學(xué)習(xí)一段時間后的寫法)
void fun(int *a) ----------(最常用的寫法 一般一維數(shù)組做函數(shù)參數(shù)是 編譯器內(nèi)部會把 形參 轉(zhuǎn)化為指針, 因此我們?nèi)绻靡痪S數(shù)組做形參 一般都會直接寫成指針形式)
{ 函數(shù)體 }
PS: 如果你以后接觸到二維數(shù)組做形參時 可能會這樣寫:
void fun(int a[常量][常量]) void fun(int a[][常量]) 或 void fun(int (*a)[常量]) 三種形式
因為 數(shù)組要考慮步長問題 所以 會退化為數(shù)組指針
而指針數(shù)組 char *str[] = { "1111", "2222"}; 做形參時
void fun(char *str[]) 和 void fun(char **str) 兩種形式
然后再看你的 void函數(shù)(u32 *a) 首先 u32應(yīng)該是數(shù)據(jù)類型(一般 u32 是無符號 32位整型)
u32 *a 應(yīng)該是 一維數(shù)組做函數(shù)參數(shù)(形參) 傳入的是 數(shù)組 首元素地址;
注意: 還有一種情況 就是 想通過形參 去改 實參的值 (這得根據(jù) 你的代碼具體來看) 因為 指針存在的最大意義就是間接賦值。
另外函數(shù)里 *a++意思是指針地址+1?
u32 p = u3常量;定義了一個變量
u32 *a = NULL; a = &p 定義了一個指針變量 并指向p(把p的地址賦給a) a++ 相當(dāng)于地址加了一個(u32 類型所占內(nèi)存的字節(jié))數(shù)。 而*a++; 是對 a 該內(nèi)存的值進行加1(也就是p加1);
希望 對你有幫助 還有不理解的地方 可以繼續(xù)問我哦  |
|