一、数组
- 构造数据类型之一。
- 数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量成为数组的元素。
- 数组中个元素的数据类型要求相同,用数组名和下标来确定。数组是一维的,也可以是多维的。
1、一维数组
i、数组名表示内存首地址,是地址常量。---------------Sizeof(数组名)是数组占用的总内存空间。
ii、编译时分配的内存:内存字节数 = 数组维数 *sizeof(元素数据类型)
iii、C语言对数组不作越界 检查,使用时要注意。
一维数组的引用:
- 数组必须先定义,在引用。
- 只能逐个引用数组元素,不能一次引用整个数组。
- 数组元素表达式:数组名[下标]------下标可以时整型以及整型表达式。
一维数组的初始化:
- 初始化方式:在定义数组时。为数组元素赋初值---------int a[5] ={1,2,3,4,5};
i、数组如果只给部分赋值,其他的值默认为0;
ii、数组不初始化,其元素值随机数;
iii、对static 数组元素,系统默认赋值为0;
注:对地址的 访问 printf("%p \r\n",&a[i]) ;
2、二维数组
- 定义方式 :数据类型 数组名[常量表达式][常量表达式] --------- 例子 :int a[4][2] float a[3][3]
- 数组元素是顺序存放的,因为内存是一维的---------二维数组中 按行序优先。
- 二维数组 可通过一维数组来理解 例如 :int a[4][2] ----- 可以看为 有四个元素的一维数组a[4] ,每个元素下又有四个元素。
3、多维数组
定义:具有两个或则两个以上下标的数组称为 多维数组。例如 : int a[3][2][1]
题目 : 打印杨辉三角的前十行。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
.........................
#include <stdio.h>
int main(int argc, const char *argv[])
{
int a[10][10] = {{0}};
int i,j;
for(i=0;i<10;i++)
{
a[i][0] = 1;
for(j=1;j<=i;j++)
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
printf("%-8d ",a[i][j]);
}
putchar('\n');
}
return 0;
}
4、字符数组
定义:字符数组是 元素 的数据类型位字符类的数组。
--- char c[10] , ch[3][4]
字符数组的初始化:i、逐个字符赋值 ii、用字符串常量
例如 :char ch[5] = {‘a’,‘b’,‘c’,‘d’,‘e’,} , char ch[] = "hello";
二 、字符串
- 在C语言中,无字符串变量,用字符数组处理字符串。
- 字符串结束标志:‘\0’
例子 : char diamond[][7] = {"azfhv","etyy","sdert","ssaa","ghd","dfg","asd"};
在二维数组中如何计算 有几行,有几列: 行数 = 总空间/一行空间大小(每一行的大小分配时是一样的)
列数 = 一行空间大小 /每个字符大小。
- 打印字符串时最好 一个一个字符打印出来,以免出现错误。
题目 : 输入一个字符串,将其逆序输出。
#include <stdio.h>
int main(int argc, const char *argv[])
{
char ch2[10];
printf("请输入少于十个字符的 字符串 : ");
scanf("%s",ch2);
for(i=10-1;i>=0;i--)
{
printf("%c",ch2[i]);
}
printf("\r\n");
return 0;
}
- 字符串函数(API)
----- c语言中实现了很多字符串处理函数
#include <string.h>
几个常见的字符串处理函数:
1、求字符串长度的函数 ------------------- strlen (字符串1)
返回值:字符串的长度,其长度不包括 该字符串的结束符。
2、字符串拷贝 函数 strcpy(字符数组1,字符串2)
功能:将字符串2 ,拷贝到字符数组1中去。
返回值:返回字符数组1 的首地址。
说明:
字符数组1必须足够大。
拷贝时‘\0’一起拷贝。
3、字符串连接函数 ---------------- strcat(字符数组1,字符数组2)
功能:把字符数组2 连到字符数组1的后面。
返值:返回字符数组1 的首地址。
说明:
字符数组1 必须足够大。
连接前两串均以‘\0’结束;连接后,串1的‘\0’取消,新串最好加入'\0'。
如果,连接的两者不是两个字符串,则出现的结果将完全不确定。
4、字符串比较函数-------------- strcmp(字符串1,字符串2)
功能:比较两个字符串
比较的规则:对两个字符串从左到右逐个比较(ASCII码),直到遇到不同字符或 ‘\0’为止。
返值:返回int 型整数。
a、若字符串1 < 字符串2 ,返回负整数。
b、若字符串1 > 字符串2 ,返回正整数。
c、若字符串1 == 字符串2 ,返回零。
不是太常见 字符串处理函数:
4、复制指定长度字符串-------------- strncpy(p , p1 , n)
功能:字符串p1中复制n个字符到 字符串p中 --------- 从头开始拷
例如 :p={"zhou"};p1 = {"bo"} strncpy(p , p1 , 2) ------------> p = {"boou"}
5、附加指定长度到字符串-------------- strncat(p , p1 , n)
功能:字符串p1中复制n个字符到 连接到 字符串p的后面 。
例如 :p={"zhou"};p1 = {"bo"} strncat(p , p1 ,1) ------------> p = {"zhoub"}
6、忽略大小写比较字符串-------------- strcasecmp(p , p1)
7、比较指定长度字符串-------------- strncmp(p , p1 , n)
8、在字符串中查找指定字符-------------- strchr(字符串p , 字符c)
返回值:第一次查到的字符在字符串中的地址;没找到则返回空。
在字符串中查找指定字符-------------- strrchr(字符串p , 字符c)
返回值:最后一次查到的字符在字符串中的地址;没找到则返回空。
9、查找字符串-------------- strstr(p , p1)
返回值:第一次查到的字符在字符串中的地址;没找到则返回空。
字符串检测函数
#include <ctype.h>
1、检查是否为字母字符 ----------------- isalpha(int c)
2、检查是否为大写字母字符 ----------------- isupper(int c)
3、检查是否为小写字母字符 ----------------- islower(int c)
4、检查是否为数字 ----------------- isdigit(int c)