1.一维数组
1.一维数组的定义:数组是具有一定顺序关系的若干变量的集合,其中每个变量称之为数组的元素。一个数组可以分解为多个数组元素,这些数组元素可以分为数据类型和构造类型 ,即数组又可以分为:数值数组,字符数组,指针数组,结构体数组。
C语言中使用数组时必须先进行定义,一维数组是只有一个下标的数组
<存储类型> + <数据类型> + (<数组名>+[<常量表达式>])
#include <stdio.h>
#define N 5
int main()
//定义一个存放5个元素的数据类型的元素数组
{
int a;
int arr[N];
return 0
}
- 存储类型指的是:auto , register, static, extern 。若省略,相当于auto
- 数据类型:可以是任意一种基本的数据类型或者构造类型。实质上是指数组元素的取值类型,对于同一组数组来说,其所有的元素的数据类型都是相同的。
- 数组名:是连续分配空间的名称,一般有字母数字下划线组成。但不能以数字开头。也不能与其他变量相同(若想计算数组所站字节大小的时候,用公式当想要计算数组中元素的个数时:可以通过:sizeof(数组名)/ sizeof(首元素)-------》sizeof(arr)/sizeof(arr[0])当想要计算数组中元素的个数时:可以通过:sizeof(数组名)/ sizeof(首元素)-----------》sizeof(arr)/sizeof(arr[0]))
2. 一维字符数组:本质就是字符串,对于字符串而言,可以整体去操作
-------------》字符串的特性函数:gets(),puts()
//定义一个可以存放20个字符的一维数组?
char str[20]={'a','b','c','d','e','f'};
char str[20]={"abcdef"};
char str[20]="abcdef";
//上面三种都是正确正确的表达方式
注意:
字符数组的结尾都要有一个结束标志'\0',如果没有考虑到'\0'的存在,则在打印数组内容时,会出现无限打印,直到遇到第一个'\0'才打印结束。所以在给字符数组进行赋值时,要考虑到'\0'的存在(至少留一个位置给'\0'),所以不可以写满
3.gets() 和puts()是非常危险的函数,一般很少使用
字符串的特性函数 Gets();
函数原型:Char *gets(char *s);//s 变量名char*需要传首地址
简易版: Gets(数组名);//输入 Puts(数组名)://输出
函数原型: Int puts(const char *s);
总结:
(1) 字符串一般都需要有结束标志付标志符,‘\0’,否则打印是会出现正常+乱码的形式;
(2) 可以同时使用特性函数,gets,puts来进行字符串的输入以及输出。 同时还可以通过标准输 入输出函数scanf和printf来完成获取字符以及输出字符串;
(3) gets和scanf的区别?
gets是只有遇到回车才代表输如完成;
Scanf是与到空格,
4.如何正确定义一个可以存放N个字符的一维数组?
char str[N] = {0};.//赋值方式,开辟了N个元素空间
char str[N] = {"0"};
注意:字符数组的结尾都要有一个‘\0’,如果没有考虑到‘\0’存在,则在数组内容是,会出现无现打印大的情况,知道遇到第一个‘\0’时才会结束打印。所以在给字符数组进行赋值时,要考虑到一个‘\0’的存在
字符数组:本质就是一串字符串
对于字符串的操作非常多-------》学习一些与字符串操作相关的函数
- 字符串的处理函数:对象: 字符串---》字符数组
- 求字符串长度的函数:strlen
- 实现字符串之间的拷贝:strcmy //完全拷贝
- 实现字符串之间的链接:strcat
- 实现字符串之间的比较:strcmp