栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

初阶C语言-数组(4673字)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初阶C语言-数组(4673字)

目录

一维数组的创建

一维数组的初始化

一维数组的使用

一维数组在内存中的存储

二维数组的创建

二维数组的初始化

二维数组的使用

二维数组在内存中的存储

数组越界

数组作为函数参数


一维数组的创建

数组的定义:数组是一组相同类型元素的集合
创建方式:元素类型 数组名 [数组的大小(常量表达式)]
如果int arr[变量]要能够使用,必须要C99语法支持变长数组才可以。


一维数组的初始化

初始化:在创建数组的同时给数组的内容一些初始值
如果数组的内存空间全部填满了,就叫完全初始化。比如 int arr[4]={1,2,3,4};
如果没全部填满,则自动补0(字符数组则补),就叫不完全初始化。比如 int arr[4]={1,2}
还有一种特殊的数组:int arr[]={1,2,3,4},此时[]根据初始化的内容自动确定元素个数

-字符数组的初始化:

  • char ch1[5]={‘s’,’b’};//s b
  • char ch2[]={‘s’,’b’};//s b

  • char ch3[5]=”sb”;//s b
  • char ch4[]=”sb”;//s b

  • char ch5[]=”sb”;//s b
  • char ch6[]={‘s’,’b’};//s b

一维数组的使用

[]是下标引用操作符,它是数组访问的操作符。
数组是使用下标来访问的,下标是从0开始的
数组的元素个数可以通过sizeof()计算得出,只需要求出数组所占内存/数组中一个元素所占内存,得到结果即为元素个数


一维数组在内存中的存储
#include 
int main()
{
 int arr[10] = {0};
 int i = 0;
    int sz = sizeof(arr)/sizeof(arr[0]);//求数组元素个数
    
 for(i=0; i 

程序运行结果

我们不难发现,每个地址都相差4,是因为每个整型元素内存大小都是4个字节
结论:1.一维数组在内存中是连续存放的 2.随着数组下标增长,地址是由低到高变化的
于是我们所用的指针可以这样操作:

#include 
int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10};
    int* p = arr;//数组名是数组首元素的地址
    int i = 0;
    for(i=0;i<10;i++)
    {
        printf("%d  ",*p);/
    bubble_sort(arr, sz);
    int i;
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

验证数组名是首元素的地址:

#include 
int main()
{
	int arr[] = { 0 };
	printf("%pn",&arr[0]);
	printf("%p", arr);
	return 0;
}

程序运行结果说明数组名确实是首元素地址

但是,有两个例外:
1.sizeof(数组名) – 数组名表示整个数组 – 计算的是整个数组的大小,单位是字节
2.&数组名 – 数组名表示整个数组 – 取出的是整个数组的地址

然后我们验证一下&:

#include 
int main()
{
	int arr[] = { 0 };
	printf("%pn",&arr[0]);
	printf("%pn", arr);
	printf("%pn", &arr);
	return 0;
}

程序运行结果

问题来了,怎么三个都是一模一样?我们刚刚说的,&数组名-取出的是整个数组的地址,这其实并没有错,因为数组的地址是从第一个元素的地址开始的,而&arr[0]和arr都是取出元素的首个地址,要注意区分这个细微的差别,我们这样验证:

#include 
int main()
{
	int arr[10] = { 0 };
	printf("%pn", arr);
	printf("%pn", arr + 1);
	printf("%pn", &arr);
	printf("%pn", &arr+1);
	return 0;
}

这里我们就可以明显的看出来了,&arr+1,是整个数组的地址+1了,而arr只是从第一个元素的地址跳到了第二个元素的地址

注意:

数组作为函数传参时,形参可以写成两种形式(本质上是指针,但可以写成数组):
1.数组形式
2.指针形式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/605349.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号