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

posted @ 2022-09-16 18:30  纯爱暴打ntr  阅读(210)  评论(0)    收藏  举报