數組:數據的組合
1、是構造類型
2、通過下標個數確定數組是一維數組還是二維數組
3、數組內的元素的類型必須保持一致
4、在內存空間中是連續的
一維數組:
一般定義形式
數據類型:(數組內元素的數據類型)數組名[元素的個數] int a[3]; 數組類型 int [3]
數組的初始化:
完全的初始化:
int a[3]={1,2,3};
int a[ ]={1,2,3};默認為完全初始化不完全初始化
int a[3]={1};//其余元素默認為零不初始化:
則里面的值為隨機數
對static數組元素不賦初值,系統會自動賦以0值。局部變量的存儲位置會從棧區換為數據區
如何引用數組內元素?數組名[下標] 注意下標從0開始
數組的數據類型:例如:int a[3]:的數據類型為int [3] 通過sizeof可以測量數據類型的大小
把元素變量當做元素個數時不能夠對數組進行初始化,編譯器會報錯。即不能用變量定義數組維數。
int n = 3;
int a[n]={1,2,3};(✖) int a[n];(✔)
數組越界可能出現的問題
1、打印辣雞值
int main (int argc ,const char *argv[])
{
int a[3]={1,2,3};
int i ;
for(i=0;i<5;i++)
{
printf(“%d ”,a[i]);
}
}
輸出 1 2 3 3 41234244 在棧區中保存數據是連續的 數組a后保存的是變量i的值, 所以在輸出完數組a中三個值之后下一個輸出為i值。
2、段錯誤segmentation fault(core dumped)
int main (int argv ,const char *argv[])
{
int a[3]; int i;
for(i=0;i<20;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<20;i++)
{
printf("%d",a[i]);
}
}
越界可能非法訪問內核數據
(gcc -g 調試作用 找段錯誤出現在哪兒)
String that is used as an exampel”
字符數組 字符串打印
puts和printf的%s打印字符串都是遇‘’停止
字符串長度函數 strlen
功能:測量字符串長度
返回值:字符串長度,不包括''. 參數:字符串或者字符串數組數組名
#include
size_t strlen (const char *s)
字符串拷貝函數 strcpy功能:字符串拷貝#include
char *strcpy(char *dest,const char *str)
注意:1、目標空間足夠大,否則會出現數組越界問題
2、連同‘’一起拷貝
3、不能實現字符串自拷貝
字符串連接函數 strcat
功能:將兩個字符串拼接在一起#include
char *cstrcat(char *dest,const char *src) 注意:1、前面字符串的''開始覆蓋。
2、目標空間足夠大。
3、不能實現字符串自連接。
字符串比較函數 strcmp
功能:比較兩個字符串是否相同,其實是將兩個字符串對應的字符一一比較,當遇到字符的
ascII值不同或者遇到''則停止比較#include
char *strcat(char *dest ,char *src) 返回值:1、當s1>s2,返回正整數 1
2、當s1=s2,返回0
3、當s1
二維數組
一般形式
數據類型(數組內元素的數據類型) 數組名[行標][列標] int a[2][3];
初始化(同一維數組) 完全初始化
不完全初始化 引用二維數組內元素
數組名[行標][列標] 行標列標也是從0開始二維數組你的數據類型:int [2][3]
二維數組鎖占空間的大小 sizeof(a)或者sizeof(int [2][3])
楊輝三角
二維數組
一般形式
數據類型(數組內元素的數據類型) 數組名[行標][列標] int a[2][3];
初始化(同一維數組) 完全初始化
不完全初始化 引用二維數組內元素
數組名[行標][列標] 行標列標也是從0開始二維數組你的數據類型:int [2][3]
二維數組鎖占空間的大小 sizeof(a)或者sizeof(int [2][3])