Day10 笔记
1,二维数组的声明:
行数在给了数据的时候,有时候可以省略,会自动计算
但是 在声明二维数组的时候,列数一定不能省略 否则会报错。
2,int count = sizeof(arr) / sizeof(arr[0][0]);
int rows = sizeof(arr)/sizeof(arr[0])
int cols = sizeof(arr[0]) / sizeof(int)
3,二维数组和函数
1),当一个函数的参数是一个一维数组的时候,那么我们在调用这个函数的时候。
可以传入一个二维数组的行
因为二位数组的行本身就是一个一维数组
2),二维数组也能作为函数的参数
当函数的参数是一个二维数组的时候,在调用传参的时候
实参必须要是同类型的数组
会丢失长度 一样 sizeof也是8
当二维数组作为参数的时候,行数没有什么用,可以省略
但是列数不能省
如果没有列数:会报错
实参的列数和形参的列数需要保持一致
传递二维数组的时候 同时还需要传递行数和列数。
3),void test( int rows, int cols, int arr[][cols]);
4,字符串就是字符数组
是以 ‘/0’ 结束的 ‘/0’没有意义 打印的时候不会显示任何内容
最根本的方式;
char name[5] = {‘j’,’a’,’c’,’k’,’\0’};
char name[] = {‘j’,’a’,’c’,’k’,’\0’};
简写的方式:
char name[] = {“jack”};
最常用的方式:
char name[] = “jack”;
注意:没有声明长度的时候 为字符串长度+1 =5
声明了长度 长度就是声明的值。
如果声明的长度小于字符串长度+1,就会出现存储不下。
所以,一般情况下,我们使用字符数组存储字符串,在声明字符数组的时候
我们不指定长度,让编译器自动计算。
声明字符数组的同时初始化一个字符串时,可以使用中文。
这个时候,一个中文占据3个字节 。
5,如何输出在存储在字符数组中的字符串数据。
char chs[] = “jack”;
printf(“chs = %s\n”,chs);
输出原理:%s 从数组地址开始输出字符 直到 \0 结束
char chs1[] = {‘r’,’o’,’s',’e’,’\0’};
char chs0[] = {‘j’,’a’,’c’,’k’};
printf(“%s”,chs0); 结果为jackrose
6,如何从控制台输入字符串数据
char str[10];
scanf(“%s”,str) 数组名代表数组地址 所以不需要加&符号
原理:会讲用户从控制台输入的数据存入字符数组中去,并自动追加 \0
注意:如果输入的字符串的字符的个数超过了 数组的长度-1 这时候会存储不下 会报错
当我们输入的时候,如果输入了空格 会认为输入结束
空格和空格后面的内容不会接受了
7,计算存储在字符数组中的字符串的长度
字符串的长度:字符串字符的个数
不能使用sizeof 因为存储在字符数组中,时有可能存不完的。
int length = 0
while(1){
if(str[length] != ‘\0’){
length++
}else{
break;
}
}
8,字符串常用函数
void puts(char arr[]);
puts(arr);
void gets(char arr[]);
gets(arr); 特点:scanf函数遇到空格结束接受 gets函数接受空格
这两个头文件是stdio.h
这两个会不安全 如果接收的字符串数组长度不够 会报错
一下四个函数的声明在string。h中
strcmp(str1,str2)函数:比较两个字符串大小
从第1个字符开始比较 返回正数 负数 0
strlen(str)函数:计算字符串长度
返回值是unsigned long 1个1个计数 直到遇到 \0 为止
strcpy(str1,str2) :把str2拷贝给str1
如果str1 太小 存不下str2 那么会报错
strcat(str1, str2)函数:把str2的数据存储在str1后面
如果str1 太小 存不下多出来的str2 就会报错
|
|