一.导入
我们先来看一段代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(void){
char arr1[] = "abc";
char arr2[] = {'a','b','c'};
printf("arr1=%d\n",sizeof(arr1));
printf("arr2=%d\n",sizeof(arr2));
printf("arr1=%d\n",strlen(arr1));
printf("arr2=%d\n", strlen(arr2));
return 0;
}
请问这段代码执行后,程序分别输出什么()
A. 3 3 3 3
B. 4 3 3 3
C. 4 4 3 3
D. 4 3 3 随机值
答案是:D,我们首先来看创建数组的这段代码,arr1数组中包含了字符串 "abc\0" ,而arr2字符串中则包含了 'a' 'b' 'c' 这三个字符,我们再来看使用sizeof()所计算的字节数,在第一个printf()函数中,我们使用sizeof()来计算arr1所占空间的大小,我们之前说过了arr1包含了字符串 “abc\0” 每一个字符占一个字节的大小,所以输出4,在第二个printf()语句中我们使用sizeof()来计算arr2数组所占空间的大小,上文我们已经知道了arr2数组中只包含了三个字符,分别是: a b c,所以所占空间大小为 3 输出 3,最后我们使用strlen()函数来求数组arr1的字符串长度,我们上篇文章中讲过在使用strlen()函数计算字符串长度的时候 \0 是不在计算范围内的,所以得到结果3,输出3,但是当我们使用strlen()函数来计算非字符串数组的时候就会出现问题,由于无法找到 \0 (字符串结束标志)所以strlen()会一直读取,直到读取到 \0 才会停止,所以输出的结果为随机值,要想解决这个问题我们有两种修改方式:
方式一:
char arr2[] = {'a','b','c','\0'};
方式二:
char arr2[] = {'a','b','c',0};
二.一维数组的使用
对于数组的使用我们在前面讲过一个操作符 [] ,名字叫:下标引用操作符,其实就是数组访问的操作符
下面我们来看一段代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(void){
char arr[] = "hello";
printf("% ",arr[0]);
getchar();
return 0;
}
这里需要注意程序的最大下标=元素总数-1,下标是从0开始的而不是1,所以这里输出的是h(%c是字符占位符),那有什么办法可以将数组中的元素全部打印出来呢?
答案是肯定的,这里我们就需要使用到for循环
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(void){
char arr[] = "hello";
for (int i = 0; i < 6; i++){
printf("%c",arr[i]);
}
getchar();
return 0;
}
我们知道了arr数组中有6个元素分别是: hello\0 这时候我们只需要创建一个循环,当i<6的时候则进入循环,循环输出每一个元素,直到i>=6不再满足条件,程序运行结果如图所示:
当然我们也可以使用strlen()来计算字符串长度,代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(void){
char arr[] = "hello";
for (int i = 0; i < (int)strlen(arr); i++){
printf("%c",arr[i]);
}
getchar();
return 0;
}
这里需要注意strlen()函数返回值的类型是无符号整型(unsigned int)所以编译器可能会告警,我们在前面加上 (int) 来进行强制类型转换即可
那如果我们要求的是一个整型数组呢?
如:
arr[] = {1,2,3,4,5,6,7,8,9,0}
那我们就需要利用sizeof()操作符来计算元素的个数
具体实现如下:
int sz = sizeof(arr)/sizeof(arr[0]);
我们再将计算得到的个数作为for循环的条件,就可以实现循环输出整型数组中的元素了,代码如下:
#include<stdio.h>
int main(void){
int arr[] = {1,2,3,4,5,6,7,8,9,0};
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i <sz; i++){
printf("%d",arr[i]);
}
return 0;
}
利用sizeof()来求出数组arr所占用的空间,再将其除以单个元素的大小,就可以得到元素的个数,在for循环中我们只需要保证变量i的值小于元素个数即可,程序运行结果如下:
2023/8/21
王起舟
标签:arr,int,C语言,---,arr2,数组,sizeof,include From: https://blog.51cto.com/u_16183773/7180934