1. 数组大小
a[5] = {5,3,4,2,1} a[5] = {1,2,3} a[5] = {} sizeof都是20,不管初始化个数,直接看开辟空间的大小.
a[] = {1,2,3,4,5} 也是20,没有定义开辟空间的大小,就看元素的个数。
2. 清零函数
bzero | memset | |
加头文件 | #include<strings.h> | #include<string.h> |
原函数 | Void bzero(void *s , size_t n) | Void *memset(void *s , int c , size_t n) |
功能 | 数组清零 | 数组清零 |
参数 | S:数组首地址,n:字节大小 | S:数组首地址,c:设置的值 n:字节大小 |
返回值 | 无 | 数组首地址 |
例子 | bzero( ch , sizeof(ch)) | memset( ch , 0 , sizeof(ch)) |
一般用的memset比较多,我们来看一下它的实际运用
#include<stdio.h> #include<string.h> int main(int argc, char const *argv[]) { int a[10] = {1,2,3,4,5,6,7,8,9,10}; //定义数组 for (int i = 0; i < 10; i++) { printf("%d ",a[i]); //打印数组 } putchar(10); //换行 memset(a,0,sizeof(a)); //数组清零 for(int i = 0;i < 10;i++) { printf("%d ",a[i]); } putchar(10); return 0; }
我们通过打印出来的数据,可以直观的感受到到memset的作用
PS:其中“n”字节大小,直接使用sizeof就可以
memset中设置的值 一般是0,其他不管。memset按字节赋值 int==4字节=32位
3. 字符数组
功能:用来存储字符串
字符串以’\0’结束,定义数组元素个数时,要把’\0’考虑到。
char a1[6]={"hello"}; char a2[6]="hello"; char a4[]="hello";
以上三个的sizeof都是6,和int数组差不多
char a3[33]="hello"; 这个是33
3.1 输入输出
3.1.1 scanf
- 每一个元素通过for单独输入,在循环中用 scanf 输入,语法:scanf(“%c” , ch[i]);
- 直接通过scanf输入,注意因为是字符串,格式要用%s, 语法:scanf(“%s”,ch);但是,当输入空格的时候,scanf默认输入完成。
- %[^\n]:想要通过scanf输入空格的话,%s要被替换成&[^\n]。scanf(“%[^\n]”,ch);
3.1.2 gets puts
- gets: 终端输入字符串,参数:数组首地址,返回值:数组首地址
- puts:终端输出字符串,参数:数组首地址,返回值:输出字符的个数
gets支持空格,puts自带换行功能
3.2 实际元素个数
- for :for(i = 0 ; i != ‘\n’ ; i++); 结束之后,i的值就是字符数组的有效个数
- strlen 需要加#include<string.h>头文件。功能:计算字符串的实际元素个数
有些时候,sizeof也可以用来计算个数,那么它和strlen的区别是什么呢。我们做一个表格来对比一下。
sizeof
strlen
类型
关键字
函数
功能
计算数组开辟的空间
计算字符串的实际元素个数
!!!!!
包含’\0’
不包含’\0’
4. 总结
今天的内容就到这里吧,消化一下,接下来我们用所学的知识去写我们的第一个简单算法,冒泡排序和简单排序。
继续努力学习!
欢迎大家指正!!!