# C语言入门(八)--数组

数组基本使用

假设现在有10个整数才在内存中,为了方便存取,可以使用数组,通过一个符号来访问多个元素

数组定义的格式:

#include <stdio.h>
void main(){
	// 数组类型 变量名[数组长度];
	int a[10]; // 定义了一个整型数组,变量名为 a;
	
	// 错误声明(仅最新的c语言标准支持,最好不这么使用)
	// int num;
	// scanf("%d", &num);
	// int a[num];
	// 其他常见错误
	// float arr[0] // 数组大小为0没有意义
	// int arr1(2)(3) // 不能用小括号
}

初始化数组

#include <stdio.h>
void main(){
	// 数组类型 变量名[数组长度];
	int a[10]={1,2,3,4,5,6,7,8,9,10};
	
	// 错误写法
	// int a[10];
	// a[10]={1,2,3,4,5,6,7,8,9,10};
}

初始化一部分值:

#include <stdio.h>
void main(){
	// 数组类型 变量名[数组长度];
	int a[10]={1,2,3,4}; // 表示只给前四个元素赋值,后6个元素值为0
	// 如果全部是0,可以直接写成
	int a1[10]={0};
	// 或 int a1[10]={0,0,0,0,0,0,0,0,0,0} // 可以但不建议,显得low
}

数组的越界访问

如下面代码:

#include <stdio.h>
void main(){
	int a[5]={1,2,3,4,5};
	int j=20;
	int i=10;
	a[5]=6; // 越界访问
	a[6]=7; // 越界访问
	printf("i=%d\n",i); // 此处的i输出的值是 7
}

** 什么是越界访问?**
越界访问的危险性就是改变了其他变量的值。
在上述代码中,数组长度是5,int类型占4个字节,所有a一个占20个字节。
在c99标准中会编译不成功,控制台报错信息:

Signal: SIGABRT (signal SIGABRT)
Exception: EXC_BREAKPOINT (code=1, subcode=0x18a80e3ec)

在这里插入图片描述

数组的传递

#include <stdio.h>
// 错误写法
// 一维数组在传递时,长度是传递不过去的,这里的a取到的是实在数组的首地址
// void func(int a[5]){ // 变量a是指针类型,后续更新
// 	// sizeof(a)/sizeof(int)是数组长度
//     for(int i=0; i<sizeof (a) / sizeof (int); i++){
//         printf("%3d\n",a[i]);  // 此时只能输出 1 2
//     }
// }

//正确写法
// 通过length 把数组的长度传递过来
void func(int a[],int length){
	for(int i=0; i<length; i++){
		printf("%3d\n",a[i]);  // 此时只能输出 1 2 3 4 5
	}
}

void main(){
    int a[5]={1,2,3,4,5};
    // func(a);
    func(a,sizeof(a)/sizeof(int));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Y_努力_strive

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

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

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

打赏作者

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

抵扣说明:

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

余额充值