第七章 数组和字符串
(1)一维数组:数据类型 数组名{整型常量表达式}
定义:数据类型是数组中全体数组元素的数据类型;
数组名用标识符表示,整型常量表达式代表数组具有的数组元素个数;
数组元素的下标一律从0开始;
编译程序为数组开辟连续的存储单元,用来顺序存放数组的个数组元素,用数组名表示该数组存储区的首地址。
初始化:int a[5]={1,2,3,4,5}
a[0]=1, a[1]=2, a[2]=3,a[3]=4,a[4]=5
(2)二维数组:数据类型 数组名{整型常量表达式}{整型常量表达式}
定义:整型类型是数组全体数组元素的数据类型;
数组名用标识符表示,两个整型常量表达式代表数组具有的数组具有的行数和列数;
数组元素的下标一律从0开始;
初始化:int a[2][3]={1,2,3}{4,5,6}
a[0][0]=1, a[0][1]=2, a[0][2]=3,a[1][0]=4,a[1][1]=5,a[1][2]=6
(3)字符串:C语言使用字符数组来存放字符串,该字符数组中包含一个'\0'字符,代表字符串的结尾。
例如:
1.遍历数组:
#include<stdio.h>
int main(void) {
int a[] = {1, 5, 6};
int i;
for (i = 0; i < 3; i++) {
printf("%d\n", a[i]);
}
}
2.遍历二维数组:
#include<stdio.h>
int main(void) {
int a[2][3] = {{100, 99, 60}, {99, 60, 99}};
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
if (i == 0) {
printf("????????%d\n", a[i][j]);
}
if (i == 1) {
printf("???????????%d\n", a[i][j]);
}
}
}
}
3.数组的理解:
#include<stdio.h>
int main(void) {
int a[2];//在a处开辟两个4个字节大小的内存空间
a[0] = 1;//在a处偏移0个位置赋值为1
a[1] = 2;//在a处偏移1个位置赋值为2
printf("%d\n", a);//a处存的东西
printf("%d\n", &a[0]);//【a存的地址】处【再偏移0】处的【地址】
printf("%d\n", a[0]);//【a处的地址】处【再偏移0】处的【值】
printf("%d\n", &a[1]);//【a存的地址】处【再偏移1】处的【地址】
}
4.字符串数组:
#include<stdio.h>
#include<string.h>
int main(void) {
// int a[2][2][3] = {{{1, 2 ,3}, {1, 2, 3}}, {{1, 2, 3}, {1, 2, 3}}};
char b[] = "china";
int a[] = {1, 2, 3};
char c = 65;
//%d c可输出为数字
//%c c也可输出为字符
printf("%s\n", b);// 如果按%s字符串格式输出,则为字符串
printf("%d\n", b);//如果首地址按%d整形输出,则为地址
printf("%d\n", a);
char national[2][100] = {"China", "England"};
//数组再存数组,便是二位数组
int grade[2][2] = {{99, 100}, {88, 66}};
//数组存数组再存一个数组,便是三维数组(字符串是数组)
char users[2][2][8] = {{"xiaosan", "123"},{"xiaosi", "123"}};
char p[] = "123";
char pp[] = "123";
char ppp[] = "1234";
printf("%d\n", p == pp);//p和pp是首地址,两个数组的首地址不一样
printf("%d\n", strcmp(p, pp) == 0);//strcmp是比较的两个字符串(经过处理的,不再是地址类似于%s)
printf("%d\n", strcmp(p, ppp) == 0);
}
第八章 复杂数据类型
(1)结构类型:struct 结构名 {数据类型1 成员名1;};
(2)共用体:union 共用体名{数据类型 成员名;}共用体变量名;
(3)枚举型:enum 枚举名{标识符[=整型常数],};
(4)指针类型