数组:数据的组合
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])