陣列中所有的資料都是相同的資料型別 int a[10]=
陣列中的元素的首位址都是連續的 a[0]=0x0000;a[1]=0x0004(位數跟資料型別有關)
c語言不允許使用變數的值進行動態定義,
賦初值的方式:
在定義時賦值;
迴圈賦值
陣列與指標的聯絡:
陣列的名字是可以當成指標使用的 (a:陣列首元素的位址)
陣列作為函式引數被傳遞的時候,陣列名會被弱化成指標
#include
void fun(int a[10])
int main()
;printf("%d\n",sizeof(a));//計算整個陣列的大小
printf("%d\n",sizeof(*a));//計算a[0]的大小
printf("%d\n",sizeof(&a));//計算指標的記憶體大小
fun(a);}`
a = &a[0] a+1=&a[1]
&a表示整個陣列的首位址 &a+1越過這個陣列的下乙個位址
#include
intmain()
return0;
}
進行字串計算時,需要留夠字元陣列的空間,否則會顯示錯誤
:是對兩個字串的逐個字元進行比較。
int
mycmp
(char
* str1,
char
* str2)
while(1
)if(!c1&&
!c2)
break;}
return0;
}
:是把所指向的字元du串(包括「\0」)複製到dest所指向的字串後面(刪除原先字串的\0」)下面將str2複製到str1後面
void
mycat
(char
* str1,
char
* str2)
else
*(str1+len1+len2)
='\0';}
}
將後面的字串複製到前面
void
mycpy
(char
*str1,
char
* str2)
else
*(str1+len)
='\0';}
}
輸出乙個字串長度,不包含』/0『
int
mylen
(char
*str)
while
(*tmp !=
'\0'
)return count;
}
本質是乙個陣列
每個指標指向的記憶體是連續的
每個指標的本身的位址也是連續的
#include
intmain()
結果sut
jj:**(
&s[0]+
1)-*
*(&s[1])
-*s[1]
-取s的首個元素位址的值j
本質是乙個二級指標
#include
intmain()
;int
(*p)[6
];p=
&a;printf
("%d\n",*
(*p+1)
);}結果:2
是乙個指標,指向函式
#include
void
function
(int i,
double d)
//乙個函式的宣告
void
anotherfunction
(int i,
double d)
//另外乙個函式宣告
intmain()
結果函式執行,10,
10.101000
又乙個函式執行,20,
20.202000
帶有指標的函式,即其本質是乙個函式,只不過這種函式返回的是乙個對應型別的位址。指標指向的不能是全域性變數
#include
int*
getdate()
;int
*aaa
(int
,int);
//函式返回的是乙個位址值,經常使用在返回陣列的某一元素位址上。
int*
getdate
(int wk,
int dy)
;int
main()
while
(wk<
1||wk>
5||dy<
1||dy>7)
;printf
("%d\n",*
getdate
(wk,dy));
}int
*getdate
(int wk,
int dy),,
,,};
return
&calendar[wk-1]
[dy-1]
;} 結果enter week(1
-5)day(1
-7)4
324
嵌入式學習(二) 嵌入式系統C 語言
1 從 cpu 復位時的指定位址開始執行 2 跳轉至彙編 startup 處執行 3 跳轉至使用者主程式 main 執行,在 main 中完成 a.初試化各硬體裝置 b.初始化各軟體模組 c.進入死迴圈 無限迴圈 d呼叫各模組的處理函式 下面是幾個 著名 的死迴圈 1 作業系統是死迴圈 2 win3...
嵌入式C語言總結
這幾天花了兩天時間看了一些嵌入式c語言方面的內容,以下是一些讀書筆記,記錄一下。1 不能有返回值 2 不能向isr 傳遞引數 3 isr盡可能的短 4 printf有重入問題 1 中斷服務程式isr 2 硬體初始化 1 某io 晶元被定為在 cpu的儲存空間而非 io空間,而且暫存器對應於某特定位址...
嵌入式c語言優化
一.演算法和資料結構優化 1.針對應用的演算法優化,比如,在音訊編譯碼中,用fft實現時頻變換。2.c語言級別的優化,如排序演算法的選擇。3.資料結構的選擇,如果需要隨機訪問,則盡量選擇陣列,如果需要隨機插入刪除,則可以選擇鍊錶。4.盡量用指標代替資料操作,大部分編譯對於指標會生成更小更快的 5.盡...