网站首页 > 技术文章 正文
一、一维数组
1、一维数组的介绍
用一段连续空间 存放相同类型的变量 这样的容器(结构)叫数组。
数组的下标是从0开始。
加入数组有n个元素:
下标范围:0~n-1
元素范围:arr[0]~arr[n-1]
2、定义数组
1、定义一个数组 有3个元素 每个元素为int
int Array[3];
2、定义一个数组 有3个元素 每个元素为int *
int *Array[3];
3、定义一个数组 有3个元素 每个元素为函数的入口地址,该函数有两个int型形参,int返回值类型
int (*arr[3])(int, int);
3、数组初始化
如果数组的全部元素初始化,可以省略[]的数值
int arr[] = {12,1,4,5,7};
int部分初始化,未初始化的自动补0
int arr[5] = {12,23,4};
指定下标初始化
int arr[5] ={[2]=12,[4]=11}//0 0 12 0 11
4、数组大小计算
计算数组所占字节
sizeof(arr);
计算数组一个元素所占字节
sizeof(arr[0]);
得到数组元素个数
int n = sizeof(arr)/sizeof(arr[0]);
二、一维字符数组
1、一维字符数组初始化
逐个元素初始化(不推荐)
char arr[5] = {‘h’,’e’,’l’,’l’,’o’};
字符串方式初始化字符数组(推荐)
(编译器会自动在字符串末尾添加‘\0’作为字符串结束标志位)
char arr[6] = “hello”;
2、字符数组遍历
使用for循环遍历(逐个字符操作)
char arr[20] = "hello world";
int n = sizeof(arr)/sizeof(arr[0]);
for(int i=0 ;i<n ;i++)
{
printf(“%c ”,arr[i]);
}
使用%s直接输出字符串,需要字符串的首元素地址,遇到’\0’才结束
char arr[6] = “hello”;
printf(“%s”,arr);
strlen测量字符串的长度(不计算’\0’,遇到’\0’结束长度计算)
printf(“strlen(arr)=%lu\n”,strlen(arr));
3、键盘输入字符数组
(1)scanf获取字符串
scanf和%s获取字符串(遇到空格或回车结束输入)
char str[128] = “”;
printf(“输入字符串”);
scanf(“%s”,str);//不需要加&
printf(“%s\n”,str);
输入 hello world
输出 hello
(2)gets()获取字符串
char str[128] = “”;
printf(“输入字符串”);
gets(str);
printf(“%s\n”,str);
获取带空格的字符串数组fgets()函数(安全)
char *fgets(char *s,int size,FILE *stream);
s:表示空间起始位置
size:表示能获取的最大字节size-1
stream:表示设备
(3)字符串拷贝
#include <stdio.h>
int main(int argc,char *argv[])
{
char arr[128] = “”;
printf(“请输入一个字符串:”);
fgets(arr,sizeof(arr),stdin);//可以获取带空格的字符串,但是会打印回车键
arr[strlen(arr)-1] = 0;//消除回车键 strlen测量字符串长度
int i = 0;
while(arr1[i] !=’\0’)
{
arr2[i] = arr1[i];
i++;
}
arr2[i] = ‘\0’;
printf(“arr1:%s\n”arr1);
printf(“arr2:%s\n”arr2);
return 0;
}
三、二维数组
1、二维数组的介绍
二维数组的总大小 == 行数 * 列数 * 每个元素大小
数组总大小 == sizeof(arr)
行数 == sizeof(srr)/sizeof(arr[0])
列数 == sizeof(arr[0])/sizeof(arr0)
2、数组初始化
分段初始化(完全初始化)可省略行数
int arr[3][4] = {{1,2,3,4},{2,3,4,5},{3,4,5,6},{4,5,6,7}}
分段初始化(部分初始化)
int arr[3][4] = {{1,2},{2,5},{3,4},{4,5,6}}
连续初始化(完全初始化)
int arr[3][4] = {1,2,3,4,5,6,7,8,9,0,12,23}
填满一行,进行下一行连续初始化(部分初始化)
int arr[3][4] = {6,7,8,9,0,12,23}
3、数组遍历
#include <stdio.h>
int main(int argc, char const *argv[])
{
int arr[3][3] =
{
{1,2,3},
{4,5,6},
{7,8,9},
};
//外层循环遍历
for(int i = 0;i<3;i++)
{
//打印循环遍历列
for (int j = 0; j < 3; j++)
{
printf("%d ",arr[i][j]);
}
//每行结束换行
printf("\n");
}
return 0;
}
四、数组操作函数
1、字符串拷贝
#include <stdio.h>
void my_strcopy(char *dest,const char *src)
{
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
}
int main(int argc, char const *argv[])
{
char src[] = "hello world!";
char dest[128] = "";
my_strcopy(dest,src);
printf("%s\n",dest);
return 0;
}
2、字符串追加
#include <stdio.h>
void my_strcat(char *dest,const char *src)
{
//找到目标字符串的末尾
while (*dest != '\0')
{
dest++;
}
//将源字符串拷贝到目标字符串
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
//在目标字符串末尾添加终止字符
*dest = '\0';
}
int main(int argc, char const *argv[])
{
char dest[128] = "hello ";
char src[128] = "world!";
my_strcat(dest,src);
printf("%s\n",dest);
return 0;
}
3、字符查找
#include <stdio.h>
char *my_strchr(const char *str,char c)
{
while (*str != '\0')
{
//如果找到字符,返回指向该字符的指针
if(*str == c)
{
return (char*)str;
}
str++;
}
//如果没找到字符返回空
return NULL;
}
int main(int argc, char const *argv[])
{
char str[128] = "q,w,e,d,s,c,v,h,y,u";
char c = 'd';
char* result = my_strchr(str,c);
if(result != NULL)
{
printf("%c:%d\n",c,result - str);
}
else
{
printf("%c not found\n",c);
}
return 0;
}
五、案例
1、键盘获取英文字母,输出在26个英文字母的第几位
知识点:
(1)键盘获取字符
(2)输入大写或小写,输出相同的结果
(3)字符比较
(4)若输入多个字符,逐个输出位置
#include <stdio.h>
void my_Array(const char * str)
{
int num = 0;
while (*str != '\0')
{
if(*str>=65 && *str <=90)
{
num = *str-64;
printf("%d ",num);
}
else if(*str>=97 && *str <=122)
{
num = *str-96;
printf("%d ",num);
}
else
{
printf("error\n");
}
str++;
}
}
int main(int argc, char const *argv[])
{
//键盘获取字符
printf("请输入英文字符或字符串:");
char str[128] = "";
scanf("%s",str);
//字符逐个比较
my_Array(str);
return 0;
}
2、键盘获取字符串,将某些字符替换为指定字符,并拷贝到新字符串中
知识点:
(1)键盘获取字符串
(2)字符的查找替换
(3)字符串的拷贝
#include <stdio.h>
void my_str(const char *str,char c,char a)
{
int i = 0;
char array[128] = "";
while (*str != '\0')
{
//如果找到字符,返回指向该字符的指针
if(*str == c)
{
array[i] = a;
}
else
{
array[i] = *str;
}
i++;
str++;
}
printf("%s",array);
}
int main(int argc, char const *argv[])
{
//键盘获取字符
printf("a:");
char str[128] = "";
char c;
char a;
scanf("%s",str);
printf("b:");
scanf(" %c",&c);
printf("c:");
scanf(" %c",&a);
//字符逐个比较拷贝
my_str(str,c,a);
return 0;
}
六、如有错误欢迎指正
关注公众号“小小创客者”分享更多学习笔记
猜你喜欢
- 2024-09-23 简说C语言指针数组和数组指针(c语言指针和数组的关系)
- 2024-09-23 每天写点笔记——C语言笔记之数组
- 2024-09-23 一文掌握C语言数组使用(c语言中数组的用法)
- 2024-09-23 指针和数组:C语言中的两个利器(c语言中指针和数组的关系)
- 2024-09-23 第四章: 数组(数组csdn)
- 2024-09-23 数组(下):数据结构中的数组和编程语言中的数组的区别
- 2024-09-23 一题吃透C语言指针与数组,一招助你理解C语言难点指针的运算
- 2024-09-23 C语言,结构体数组的定义和引用(c语言结构体数组怎么定义)
- 2024-09-23 C语言二维数组,如何定义?(c语言中二维数组的定义方式)
- 2024-09-23 C语言:数据结构-数组的定义、逻辑结构和特点
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 571℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 512℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 468℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 447℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 445℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)