【C语言】 数组操作集合
创建数组
根据数组的类型我们可以把数组大致的分为数值型数组和字符串数组(我自己分的),当然还有指针数组在这次的总结里不多做数目。创建方式大致就是 变量名 + 大小
int array[10];
char array[10];
在创建数组的时候你可以选择对数据进行初始化,比如
int a[10] = {0}
数组的内存
数组在内存中是顺序存储的,即内存地址是连在一块的,假设 a[0]的地址是p那么a[1]的地址就是p+1, 因此使用指针操作可以完成对数组的一些好玩的操作,比如用指针把数组给拼接在一块。下面介绍一下我自己完成的使用指针完成字符串的拼接
指针相关知识
在说明拼接问题之前先说明一些和指针的相关问题
- 字符串数组对应的地址就是字符串数组中第一个元素对应的地址
- 字符串数组最后一个元素之后肯定是0
拼接的思路
在知道了这些之后,拼接的具体输入就是想把指针移动到第一个指针的末尾,然后在让后面的地址存储第二个字符串数组对应的值
比如说我们现在有 char s[80] 和 char t[80]两个数组,我想把s拼接到t的后面那么应该怎么做呢
第一步:移动位于字符串数组t的指针到末尾
第二步:把另一个数组拼接到后面
例子:
程序实现:将字符串 s 连接到t 的后面。如输入 Birthday 和 Happy ,则程序输出Happy Birthday
#include <stdio.h>
void mystrc(char* s, char* t);
int main() {
char s[80], t[80];
gets(s);
gets(t);
mystrc(s, t);
puts(t);
return 0;
}
void mystrc(char* s, char* t)
{
printf("%p\n",s);
// make the pointer to the end of str
while(*t != 0) t++;
while(*s != 0)
{
*t=*s;
t++;
s++;
}
}
数组的输入和输出方式
对于数值型数组输入的方式没有太多的花样,这里主要总结一下字符串数组的输入和输出方式
scanf
最古老的输入方式了,有些编译器上甚至直接不建议使用
特点:
(1)scanf() 以 空格 或 回车符 结束读取,空格 或 回车符 会遗留在缓冲区。
(2)不能直接输入带空格的字符串。
char a[10];
scanf("%s",&a);
gets
gets方法在很多ide上也显示不安全,主要有以下几点特点
(1)gets() 从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区。
(2)可以用来输入带空格的字符串。
(3)可以无限读取,不会判断上限,因此使用gets不安全,可能会造成溢出
char a[100] = {0};
gets(a);
fgets
从键盘中输入字符串数组最好是使用fgets方法,这样可以有效的避免越界的情况。内存越界的话可能会引起各种各样的问题,因为你也不知道约出去的内存地址会不会是其他变量的内存地址。
fgets(str,len,stdin)
fgets 函数有三个参数,第一个是你要输入的数组,第二个是指定可以输入的长度,一般填写sizeof(array)就可以了,stdin表示输入流。
printf
这个不用多说了
puts
puts 函数——输出字符串的函数
其一般形式为 : puts(字符数组)
作用是将一个字符串(以’\0’结束的字符序列)输出到终端。
二维数组
二维数组的基础操作与一位数组相同,不同的一点是二维数组一般用两层for循环去控制
// 创建二维数组
int a[5][5];
// 输出二维数组
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}