C语言学习第10天,数组
一、数组
数组由一系列类型相同的数据对象依次排列组成。具有以下特点:
1.依次排列:每个数组元素都是相邻的,从第一个数组元素到最后一个数组元素依次摆放。
2.类型相同:数组的元素都是类型相同的数据对象,不同的数据对象不能组成数组。
1.数组初始化

eg.int arr[10]={1,2,3,4,5,6,7,8,9,0};
2.访问数组
数组名+下标(从0开始,0为第一个元素)

使用循环快速访问数组元素
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
int i;
for(i=0;i<=9;i++)
printf("%d\n", arr[i]);
return 0;
}
3.修改数组元素
#include<stdio.h>
int main()
{
int arr[10] = {};//所有元素都初始化为0
printf("%d\n", arr[5]);//打印第6个元素
arr[5] = 123;//对第6个元素赋值
printf("%d\n", arr[5]);//打印赋值后的数组,修改完成
return 0;
}
数组所占的空间=单个元素所占空间大小*数组元素个数
4.赋值整个数组
数组无法整体赋值,但可以通过别的方法进行赋值
1.循环
#include<stdio.h>
int main()
{
int arr1[5] = {};
int arr2[5] = { 1,2,3,4,5 };
for (int i = 0; i < 5; i++)
{
arr1[i] = arr2[i];
printf("%d", arr1[i]);
}
return 0;
}
2.内存复制,memcoy函数
memcpy的第一个参数是目标数组名。memcpy的第二个参数是原始数组名。memcpy的第三个参数指明需要复制多少字节数据。
#include<stdio.h>
#include<memory.h>
int main()
{
int arr1[5] = {};
int arr2[5] = { 1,2,3,4,5 };
memcpy(arr1, arr2, sizeof(arr1));
for (int i = 0; i < 5; i++)
printf("%d", arr1[i]);
return 0;
}
注意事项:设第三个参数,需要复制的字节数为N。
1.sizeof(arr2)不能小于N,否则复制完arr2的数据后,将复制到无意义内容。
2. sizeof(arr1)不能小于N,否则将没有足够空间存放数据。
3.要使用memcpy函数,需要包含头文件memory.h
eg.#include<stdio.h>
#include<memory.h>
int main()
{
int arr1[3] = {};//可以容纳3个int
int arr2[5] = { 1,2,3,4,5 };
memcpy(arr1, arr2, sizeof(int)*2);//仅复制arr2中的两个字节到arr1,也就是说只会复制两个元素
for (int i = 0; i < 3; i++)
printf("%d", arr1[i]);
return 0;
}
结果为120
二、多维数组
数组中含有多个数组
int B[5][10],代表数组B中有个元素,每个元素都是含有个int元素的数组。
B[0][0],代表访问第一个元素中的第一个元素
1.访问二维数组
由于有多个下标,所以我们一般都是用嵌套来实现
#include<stdio.h>
int main()
{
int B[5][4] = { 1,2,3,4,
5,6,7,8,
9,10,11,12,
13,14,15,16,
17,18,19,20
};
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4; j++)
printf("%d ",B[i][j]);
printf("\n");
}
return 0;
}
2.修改多维数组元素
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4; j++)
B[i][j] = B[i][j] * 2;
}
将这个循环插入作为第一个循环,就能将元素全部变为偶数。
对于更高维的数组,我们就要使用更多重的嵌套。
三、字符串与字符数组
1.字符串常量
"HelloWorld"占用11个字节。字符串常量在内存中,由每个字符的ASCII码按照顺序排列构成,每个字符仅占一个字节,并且末尾会附上一个数值0,指示字符串结尾。这个我们前面提过。
字符串满足数组的类型相同且顺序排列的特点。那么元素为char的数组可以用于存储字符串。
2.初始化字符数组
char str[20]={'H','e','l','l','o','W','o','r','l','d'};等价于char str[20]="HelloWorld";
3.打印字符数组
可以直接把数组作为printf的参数打印出来,printf(“helloworld”); 或者printf(str);
另外转换规范%s,可以作为字符串的占位符,printf("%s",str);
4.初始化列表长度必须大于数组长度
char str[10]={'H','e','l','l','o','W','o','r','l','d'};无法正常打印
因为\0是第11个字节,数组长度只有10
5.字符数组的大小及长度
大小与声明大小相同上面的例子大小为10
1.使用循环测量字符串长度
#include<stdio.h>
int main()
{
char str[20] = "HelloWorld";
int len = 0;
while (str[len] != '\0')
{
len++;
}
printf("%d", len);
return 0;
}
结果为10
2.使用strlen测量字符串长度
strlen的使用范式:1.strlen可以接受一个字符串作为参数。
2. strlen返回值为这个字符串的长度。
3.使用strlen函数,需包含头文件string.h。
eg.#include<stdio.h>
#include<string.h>
int main()
{
char str[20] = "HelloWorld";
int len1;
len1 = strlen(str);//测量str内字符串长度
printf("len1=% d\n", len1);
int len2;
len2 = strlen("HelloWorld");//直接测量字符串常量刷“”helloworld“的长度
printf("len2=% d\n", len2);
printf("sizeof str=% d\n", sizeof(str));//测量数组所占空间大小
printf("sizeof helloworld=% d\n", sizeof("HelloWorld"));//测量字符串常量所占空间大小
return 0;
}
结果为len1= 10
len2= 10
sizeof str= 20
sizeof helloworld= 11
6.putchar和getchar函数
可单独输出/输入一个字符
小写字母ASCII码减32即为对应的大写字母。
#include<stdio.h>
int main()
{char c;
c=getchar();
c=c-32;
putchar(c);
return 0;}
输入小写字母即可输出大写字母
使用putchar输出一串字符串。
#include<stdio.h>
int main()
{char str[]="HelloWorld";
int i=0;
while(str[i]!='\0')
{putchar(str[i++]);}
return 0;}
结果为HelloWorld

浙公网安备 33010602011771号