2.二维数组
二维数组定义:
由n个数据类型相同的一维数组所组成的数组
int a; 类型名:int
int arry[10]; 类型名:int [10]
在变量定义中,去掉变量名,即为类型名
根据此种定义,可以得到:
int arry[5][10]中,存在的是有5个一维数组arry[10],因此是5行10列
int arry类型为 int [5][10]
二维数组访问:
int [m][n];
m:访问二维数组中的第m+1个元素(一维数组)
n:访问二维数组中的第m+1个元素(一维数组)中的第n+1个元素(元素)
二维数组的初始化:
全局初始化:
int arry[2][3] = {{1,2,3},{4,5,6}}
int arry[2][3] = {1,2,3,4,5,6}
两者等价
局部初始化
int arry[2][3] = {{1,2},{3,4}}
int arry[2][3] = {1,2,3,4}
默认初始化
int arry[][3] = {{1,2,3},{4,5,6}}
int arry[][3] = {1,2,3,4,5,6}
以上两者等价
int arry[][3] = {0};
int arry[][3] = {{0}};
以上两者均可以将所以元素初始化为0;
3.字符型数组
定义:
由n个字符型数据元素所组成的数组
char str[1024] = {0};
字符型数组访问:
数组名[下标]
字符型数组初始化:
定义字符串数组时,系统会自动添加\0字符
全部初始化
char str[5] = {'h','e','l','l','o'}; 保存五个字符,不是字符串
char str[6] = {'h','e','l','l','o','\0'}; 保存六个字符,是字符串
char str[6] = {"hello"}; 等价于 char str[6] = "hello"
局部初始化
char str[10] = "hello";
char str[10] = "\0"
默认初始化
char str[] = {'h','e','l','l','o'}; 不是字符串
char str[] = "hello"; 是字符串
字符型数组操作
输入:
scanf("%s",str);
gets(str);
输出:
printf("%s",str);
puts(str);
字符型数组中字符串遍历的一般条件
while(str[i] != '\0')
{
}
字符串有效字符数量统计(不包括'\0')
strlen
#include<string.h>
size_t strlen(const char *s);
字符串拷贝
需要用到strcpy函数
#include<string.h>
char *strcpy(char *dest,const char *src)
dest:目标空间
src:源空间
函数返回值:目标空间的地址标号
字符串拼接
需要用到strcat函数
#include<string.h>
char *strcat(char *dest,const char *src);
dest:目标空间
src:源空间
函数返回值:目标空间的地址标号
补充:
1.作业2中初次结果出错,用到语句
while(str[i++] != '\0')
//用以统计输入字符串的字符长度,但实际结果不正确,因为在此过程中最后一次判断到'\0'字符时,尽管会跳出循环,但i++依然会执行,因此所得结果永远会比输入的长度多1
while(str[i] != '\0'){i++;}//是正确解决方案
2.在作业1中,另外一种常见错误,在初始化整型变量时,用到语句
int i, j = 0;//是一种典型错误,这种初始化方式,只会将j初始化为0
int i = 0,j = 0;//是正确解决方案