C语言入门(二十)>>>数组(一)- 一维数组

一维数组的创建和初始化

数组的创建

数组是一组相同类型元素的集合。

数组的创建方式:

type_t arr_name [const_];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小

数组创建的实例

//代码1
int arr1[10];
//代码2
int count = 10;
int arr2[count];//数组不可以正常创建
//代码3
char arr3[10];
float arr4[1];
double arr5[20];

注:数组创建,【】中必须是一个常量,使用变量则会报错。

数组的初始化

int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {1,2,3,4,5};//完全初始化
char arr4[] = {'a',98,'c'};
char arr5[] = {'a','b','c'};
char arr6[] = "abcdef";

数组在创建得时候如果想不指定数组得确定的大小就得初始化。数组得元素个数根据初始化得内容来确定。
但是对于下面得代码要区分,内存中如何分配?

char arr1[] = "abc";
char arr2[3] = {'a','b','c'};
int main()
{
	char arr1[] = "abc";
	char arr2[3] = {'a','b','c'};
	printf("%d\n", sizeof(arr1));//输出4
	printf("%d\n", sizeof(arr2));//输出3
	printf("%d\n", strlen(arr1));//输出3
	printf(""%d\n, strlen(arr2));//输出一个随机值
	return 0;
}

解释如下:
arr1 ----> a b c \0 ----> 占4个字节(sizeof)
arr2 ----> a b c ----> 占3个字节(sizeof)
arr1 ----> a b c \0 ----> 占3个字节(strlen)
arr2 ----> a b c ----> 随机值(strlen)因为后面遇到\0是随机的,不确定的

#include <stdio.h>
#include <string.h>

int main()
{
	//创建一个数组 - 存放整形 - 10个
	//int arr[10] = {1,2,3};//不完全初始化,剩下的元素默认初始化为0
	//char arr2[5] = {'a','b'};//将b改为98也是可行的,98是b的
	//char arr3[5] = "ab";//ok
	char arr4[] = "abcdef";
	printf("%d\n", sizeof(arr4));//输出结果是7,
	//sizeof 计算 arr4所占空间的大小
	printf("%d\n", strlen(arr4));//输出结果是6,strlen - 遇到\0停止,不记录
	//strlen 求字符串的长度
	//[a b c d e f \0]
	//int n = 5;
	//char ch[n];//err
	return 0;
}

1、strlen 和 sizeof 没有什么关联
2、strlen 是求字符串长度的 - 只能针对字符串求长度 - 库函数 - 使用得引用头文件
3、sizeof 计算变量、数组、类型得大小 - 单位是字节 -操作符

一维数组的使用

对于数组的使用我们之前介绍了一个操作符:【】,下标引用操作符。它其实就是数组访问的操作符。代码如下:

#include <stdio.h>
#include <string.h>

int main()
{
	char arr[] = "abcdef";//[a][b][c][d][e][f][\0]
	printf("%c\n", arr[3]);
	int i = 0;
	//int len = strlen(arr);
	//for (i = 0; i < len; i++)
	for (i=0; i<(int)strlen(arr);i++)
	{
		printf("%c ", arr[i]);
	}
	return 0;
}

#include <stdio.h>
#include <string.h>
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	//对数组内容赋值,数组是使用下标来访问的,下标从0开始,所以:
	printf("%d\n", sz);
	int i = 0;//做下标
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	
	return 0;
}

总结:
1、数组是使用下标来访问的,下标是从0开始的;
2、数组的大小可以通过计算来得到;

一维数组在内存中的存储

代码如下:

#include <stdio.h>

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("&arr[%d] = %p\n",i, &arr[i]);
	}
	return 0;
}

在这里插入图片描述

随着数组下标的增长,元素的地址,也在有规律的递增。由此可以得出结论:数组在内存中是连续存放的。

  • 50
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值