C_数组

本文介绍了C语言中数组的基本操作,包括一维数组的定义、初始化、引用及越界危害。还探讨了二维数组及其初始化。此外,详细阐述了字符数组的初始化、输出方法,以及常用字符串处理函数的功能和使用,如strcpy、strcmp、strlen等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机栈结构,先定义的变量为高地址,后定义的变量为低地址,地址间连续
一维数组:
int,char,float a[10];
数组名a表示内存首地址,是地址常量
a ==&a[0]
a+1 == &a[1]
a是常量不能在等号的左边

int a[5];
a是一级地址,&a是二级地址,表示行指针
&a+1是偏移20个字节

一.初始化:
数组不初始化其元素值为随机数
初值个数不能多于数组长度int a[3]={0,1,2}
只给部分元素赋初值,其他元素为0
赋初值是可不指定数组长度,长度为初值个数

二.数组引用
先定义后引用
最大下标小于个数
不可越界:
数组越界危害:
短越界,可能更改连续地址后面变量的值
长越界,可能更改不可动区域的值造成段错误
越界:
int i=0;
int a[5];
for(i=0;i<=5;i++)
a[i]=I;
由于地址是连续的,a[5]的地址是i的地址,所以会改变i的值

排序方法:
冒泡排序,选择排序,插值排序,二分查找

二维数组定义:
int a[3] [4] --> 行 列
一.初始化
直接赋值,一行的所有值可以加大括号也可以不加
二维数组的行可以缺省,列不可以
部分赋值的其余值为0

一级地址:其地址内存放的数据
二级地址:其地址内存放的是一级地址
二维数组中
a是一个行指针,是一个二级地址,a代表第一行整体一行的地址,a+1是偏移一行
a[0]是列指针,是一级地址,表示的是本行头元素,a[0]+1是表示下一个元素的地址
a[2][1]的地址表示 &a[2][1] a[2]+1 *(a+2)+1 *(a+n)==a[n]

字符数组
一.初始化
逐个字符赋值 char ch[3]-={‘b’,‘o’,‘y’};
用字符串常量char ch[4]=“boy”,占用四个字节,还有’\0’,字符串长度为3
字符串结束标志’\0’
二.输出字符串
char buf1[10]=“12345678”;
printf("%.4s\n",buf1)输出前四位
printf("%.3s\n",buf1+3)输出456

int buf2[10];
scanf("%3s",buf2);只提取输入的前三位
gets("%s\n",buf3)输入字符串,可以包括空格,输入的字符串后边自动加’\0’
puts(字符数组) 向显示器输出字符串,结束后再输出一个换行

二维字符数组:
输出格式:
for(i=0;i<5;i++)
{
printf("%s\n",buf[i]) 按行输出
}

字符串处理函数:
strcat:连接两个字符串
strcat(buf1,buf2) 直接合并
注意:
strcpy:字符串拷贝
strcpy(buf1,buf2)将后面的复制到前面

strcmp:比较两个字符串,返回int类型
strcmp(buf1,buf2) buf1>buf2,返回正数 1
< ,返回负数 -1
== ,返回零 0
strlen:计算字符串长度,不包括’\0’

strncpy(buf,“123456”,4)只拷贝后面字符串的前四个字节到第一个字符串,不拷贝’\0’,遇到’\0’结束拷贝
printf("%s\n",buf) --> 1234

strncmp(buf1,buf2,3) --> 只比较前面三个字节
strncasecmp(buf1,buf2,3) --> 只比较前面三个字节,且不区分大小写

strncat(buf1,buf2,3) --> 只连接后面字符串的前三位

sscanf(buf,"%s %s",src1,src2)
memaet(buf,0,sizeof(buf)) 数组全部清零
memcmp(a,b,sizeof(a)),比较数组是否一样,返回int值,一样结果为0,以字节比较
memcpy(b,a,sizeof(a))内存拷贝
sprintf(buf,“字符串”)将输出的字符串输出到buf

char buf[]=“1111 2222”
char scr1,scr2;
sscanf(buf,"%s%s",scr1,scr2)//1111给src1 2222给src2
char buf[]=“1111=2222”
char scr1,scr2;
sscanf(buf,"%[^=]=%s",scr1,scr2)//1111给src1 2222给src2 //[^=]是遇到等号停止,也可以是其他符号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值