首页 > 其他分享 >C语言数组(2)--- 一维数组的使用

C语言数组(2)--- 一维数组的使用

时间:2023-08-21 23:31:56浏览次数:38  
标签:arr int C语言 --- arr2 数组 sizeof include

一.导入

我们先来看一段代码:

#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不再满足条件,程序运行结果如图所示:

C语言数组(2)---  一维数组的使用_数组

当然我们也可以使用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的值小于元素个数即可,程序运行结果如下:

C语言数组(2)---  一维数组的使用_sizeof_02

                                                                                                                 2023/8/21

                                                                                                                          王起舟

标签:arr,int,C语言,---,arr2,数组,sizeof,include
From: https://blog.51cto.com/u_16183773/7180934

相关文章

  • 关于Azure-存储账户-SMB-CIFS文件共享-在Linux系统中的挂载
    笔者在自己Azure平台创建了一个【标准】性能,即StorageV2类型的存储账户、然后在其下创建了一个文件共享CIFS注意:标准存储账户中的【文件共享】,只能创建基于SMB协议的文件共享如果要创建NFS文件共享,只能在创建存储账户时,【性能】处选择,高级,文件共享,才能同时支持CIFS和NFS 这......
  • 论文解读(KDSSDA)《Knowledge distillation for semi-supervised domain adaptation》
    Note:[wechat:Y466551|可加勿骚扰,付费咨询]论文信息论文标题:Knowledgedistillationforsemi-supervised domainadaptation论文作者:MauricioOrbes-Arteaga, JorgeCardoso论文来源:2019aRxiv论文地址:download论文代码:download视屏讲解:click1介绍 动机:在注释数......
  • Haxx curl相关漏洞修复参考[CVE-2022-4355]
    Haxxcurl/libcurl安全漏洞修复参考libcurl是一个免费,易用的客户端传输库,支持DICT,FILE,FTP,FTPS,Gopher,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,POP3,POP3S,RTMP,RTSP,SCP,SFTP,SMTP,SMTPS,TelnetandTFTP等协议。libcurl支持SSL认证,HTTPPOST,HTTPPUT,FTP上......
  • Programming abstractions in C阅读笔记:p123-p126
    《ProgrammingAbstractionsInC》学习第50天,p123-p126,总结如下:一、技术总结1.notaion这也是一个在计算机相关书籍中出现的词,但有时却不是那么好理解,因为它可以指代很多对象,这里做一个记录。示例:p124。InC,youcanuseanycharacterarraytoholdstringdata.charstr[6]={......
  • t113-c-制作wifi设置页面
    c转命令行首先我们要用到命令行,c和命令行这么转换呢?https://blog.csdn.net/arv002/article/details/112711673根据这篇文章那么:popen:什么是popen?https://www.cnblogs.com/52php/p/5722238.html简单来说就是c语言和cmmd的交互函数,注意这个函数会产生子进程简单的测试一下:#......
  • py之路——day13-20230821:生成器和迭代器
    作者:zb一、列表生成式1、定义用来生成列表的表达式2、特点可以使代码更加简洁示例代码如下:1#普通方法定义列表2a=[1,2,3]3print(a)4#列表生成式方法定义列表5b=[i*2foriinrange(10)]6print(b)7#如果不用列表生成式,上述b列表定义会很麻烦......
  • 第八章 SMS--短信服务
    8.1短信服务介绍短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力。产品优势:覆盖全面、高并发处理、消息堆积处理、开发管理简单、智能监控调度产品功能:短信通知、短信验证码、推广短信、异步通知、数据统计应用场景:短信验证码、系统信息推送、推......
  • 阿里相关组件-阿里Cola状态机相关
    使用State:状态Event:事件,状态由事件触发,引起变化Transition:流转,表示从一个状态到另一个状态ExternalTransition:外部流转,两个不同状态之间的流转InternalTransition:内部流转,同一个状态之间的流转Condition:条件,表示是否允许到达某个状态Action:动作,到达某个状态之后,可以做什......
  • jmeter详解-线程组详解(8)-bzm - Arrivals Thread Group
    bzm-ArrivalsThreadGroupArrival:到来,抵达介绍这个线程组使用“arrivals”调度作为一种表达负载的方式。“arrivals”表示线程迭代开始。如果所有现有线程在迭代过程中都很忙,它将创建新线程。注意,恒定的到达率意味着增加并发性,所以要小心你输入的值。使用“ConcurrencyLimi......
  • 剑指 Offer 45. 把数组排成最小的数(中等)
    题目:classSolution{public:stringminNumber(vector<int>&nums){//这道题要学会重构字符串的比较排序vector<string>str;//将数组全部转化为字符串进行比较stringresult;for(inti=0;i<nums.size();i++){str.p......