零基础C语言——数组

本文详细介绍了C语言中数组的概念,包括数组的定义、创建方式(传统法和C99支持的初始化)、内存布局、下标访问、变长数组与静态数组的区别,以及strlen和sizeof的用途和计算机制。还探讨了一维数组的使用、常量数组的保护以及内存地址计算。
摘要由CSDN通过智能技术生成

数组

定义:(1)一组相同类型元素的集合;
           (2)在内存中是连续排列的;
           (3)可以通过下标的方式去随机访问它们。

数组的创建

type_t    arr_name    [coust_n]
//tyep_t是数组的元素类型    int char
//coust_n是一个常量表达式,用来指定数组大小(不可以是负数) 

 注:C99 语法支持  变长数组——数组的大小是变量(VS2019不支持变长数组)

变长数组是不支st持初始化的,并且变长数组也是不能用static,extern等关键字修饰的。

第一种初始化(传统法):

在创建时给上值。

char arr[3]={'0','1','2'};

元素个数等于创建大小是完全初始化,另一种叫不完全初始化。{ }中值的数目不能大于在数组声明时在[ ]中指定的元素数目。不完全初始化的未出现元素都被默认初始化为0。

int arr[2]={ 0 };//全部为0

在初始化数组时,可以不指定数组的大小。但是操作系统会根据初始化的内容来自动开辟空间。

字符串后默认有一个“\0”。

 char ch5[]={'bit'};

开辟的空间储存为    b i t \0

打印结果为    bit

char ch6[]={'b','i','t'}

开辟的空间储存为     b i t

打印结果为    bit烫烫....(乱码)it

打印时“\0”为结束标志

同时求字符串长度时(strlen)

第一个为3;第二个为随机值。

第二种初始化(C99支持的):
int arr[3] = {[2] = 3};

直接将下标为2的第三个元素初始化为3。

注:在VS上,C99支持的不是很好,会报错。

int arr[10]={23,43,24,[3]=54,34,54,[7]=43,[1]=24};

这样初始化的特点:

1.如果初始化数组容量较大,这样初始化可指定某一元素为特定的值。同时如果这种初始化后,以上面的代码为例,[3]=54,34,54,那么第四个元素为54,后面接着的元素为34,54就会默认给第五个元素,第六个元素作为[4],[5]的初始化的值。

2.如果再次初始化指定元素,那么最后初始化的值会取代之前初始化的值,如上面代码中,[1]=24,那么第二个元素的输出结果为24,而不是第一次初始化的43。

如果像下面这样初始化,

int arr[]={43,[7]=64};

那么用scanf输出的结果为        43 0 0 0 0 0 0 64。

这是因为如果未在[ ]内指定元素的个数,那么编译器会自动将数组大小设置为能足够装下初始化的值。


讨论strlen和sizeof

1.sizeof为一个操作符(运算符);而strlen是库函数,使用时要引头文件string.h。

2.用途不同:sizeof是计算一个数组(或其他类型)所占空间大小,strlen是专门用于求字符串的长度,将'\0'前面的字符串的长度计算出来。

3.计算方法机制不同。sizeof 不会受到'\0'等字符的影响,,关注的是空间的大小,有多少空间就计算多少空间。strlen是遇到'\0'时才会停止,关注的是字符串的长度。并且是在遇到第一个'\0'时就停止。如果没有遇到,将会是一个随机值(会一直往后找'\0',直到找到。


一维数组的使用

使用即可以访问并可以修改,即可读可写。
[ ]-下标引用操作符
1.数组是使用下标来访问的,下标从0开始。

也称为:所有数组都是以0作为它们第一个元素的索引,即基索引,数组的最后一个索引是数组的总大小减去一。

数组的第四个元素,下标为3,可用arr[3]表示。就可利用以下形式打印出来。
printf("%d ",arr[3]);

如果想把数组中全部元素都打印出来,

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int siz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < siz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

sizeof(数组名)计算数组大小,单位 字节

假设整型数组元素为10,得数为40(整型一维数组的元素内存大小是4)

sizeof(数组[0])第一个元素的大小

sizeof(arr)/sizeof(arr[0])
//为元素个数

方法:数组的大小除以数组每个元素的大小

当然,我们可以用scanf在数组里写入元素。
#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int siz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < siz; i++)
	{
		scanf("%d",&arr[i]);
	}
	for (int i = 0; i < siz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

同理,数组的每个元素也是支持算法、赋值等运算的。

如果只想让别人可读我的数组,不可修改的形式。

这时我们可以用到关键词:const

注: const是什么呢?
如果一个变量被const修饰,它就变成了只读的形式。
const int arr[3]={1,2,3};

这样,数组中的每个元素就变成了只能访问的,而不能修改的变量了。数组中的每个元素就变成了const int类型。

并且,在一个函数中,如果不想要形参被修改,可用 const修饰,这样,会对变量经行保护

2.数组的大小可以通过计算得到。

一维数组在内存中是连续存放的!

地址为十六进制存在,即0-9,a,b,c,d,e,f
可以看出88 8C 90 94 98 9C A0 A4 A8 AC.间为四个字节的变(int整型一维数组的元素内存大小是4)
(地址大小为4或8字节)
数组名是数组首元素的地址。随着数组下标的增长,地址是由高到低变化的!
=>一般而言,对指针进行加1操作,得到的将是下一个元素的地址,一个类型为T的指针移动,是以sizeof(T)为移动单位。因为地址是连续的,只是他的内容是四个字节的大小,地址加一就是下一个地址了。
3.可以用[ ]来对数组进行访问(下标/索引)
int k=arr[2];

利用概念(声明数组,数组赋值,访问数组),可得

int main()
{
	int arr[10] ;//声明
	int i, j;
	for (i = 0; i < 10; i++)
	{
		arr[i] = i + 100;//赋值
	}
	for (j = 0; j < 10; j++)
	{
		printf("arr[%d]=%d\n", j,arr[j]);//访问
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七十二旹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值