当前位置:网站首页>012 C语言基础:C数组
012 C语言基础:C数组
2022-06-27 04:04:00 【入狱计划进度50%】
一:概述
C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。
数组的声明并不是声明一个个单独的变量,比如 number0、number1、…、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、…、numbers[99] 来代表一个个单独的变量。
数组中的特定元素可以通过索引访问。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。数组中的特定元素可以通过索引访问,第一个索引值为0。
二:声明数组
在C中要声明一个数组,需要指定元素的类型和元素的数量。
type arrayName [arraySize];
这是一维数组,arraySize必须是一个大于零的整数常量,type可以是任意有效的C数据类型。例如,声明一个类型为double的包含10个元素的数组balance:
double balance[10];
现在balance是一个可用的数组,可以容纳10个类型为double的数字。
三:初始化数组
double balance[5] = {
1000.0, 2.0, 3.4, 7.0, 50.0};
大括号{}之间的值的数目不能大于我们在数组声明时[]中指定的元素数目。若是省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果:
double balance[] = {
1000.0, 2.0, 3.4, 7.0, 50.0};
创建一个数组,它与前一个实例中所创建的数组是完全相同的。
四:访问数组元素
double salary = balance[9]; 把数组中第10个元素的值赋给变量salary
实例:
#include <stdio.h>
int main(){
int n[10]; // n是一个包含10个整数的数组
int i,j;
// 初始化数组元素
for(i=0; i<10; i++){
n[i] = i + 100;
}
for(j=0; j<10; j++){
printf("element[%d] = %d \n", j, n[j]);
}
return 0;
}
结果:
┌──(rootkali)-[~/Desktop/c_test]
└─# vim fangwenshuzu.c
┌──(rootkali)-[~/Desktop/c_test]
└─# gcc fangwenshuzu.c -o fangwenshuzu
┌──(rootkali)-[~/Desktop/c_test]
└─# ./fangwenshuzu
element[0] = 100
element[1] = 101
element[2] = 102
element[3] = 103
element[4] = 104
element[5] = 105
element[6] = 106
element[7] = 107
element[8] = 108
element[9] = 109
五:多维数组
C语言支持多维数组,形式如下:
type name[size1][size2]...[sizeN];
例如,下面的声明创建一个三维5.10.4整型数组
int threedim[5][10][4];
二位数组
多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,形式如下:type arrayName [ x ][ y ];
其中,type 可以是任意有效的 C 数据类型,arrayName 是一个有效的 C 标识符。一个二维数组可以被认为是一个带有 x 行和 y 列的表格。
因此,数组中的每个元素是使用形式为a[i][j]的元素名称来标识的,其中a是数组名称,i和j是唯一标识a中每个元素的下标。
初始化二维数组
int a[3][4] = {
{
0, 1, 2, 3}, // 初始化索引号为0的行
{
4, 5, 6, 7}, // 初始化索引号为1的行
{
8, 9, 10, 11} // 初始化索引号为2的行
}
内部嵌套的括号是可选的,下面的初始化与上面是等同的。
int a[3][4] = {
0,1,2,3,4,5,6,7,8,9,10,11};
访问二维数组元素
二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的。
int val = a[2][3] 获取数组中第3行第4个元素
实例:
#include <stdio.h>
int main(){
// 一个带有5行2列的数组
int a[5][2] = {
{
0, 0},
{
1, 2},
{
2, 4},
{
3, 6},
{
4, 8}
};
int i, j;
printf("%d \n", a[1][1]); // 1 1 为其索引值
printf("------------- \n");
// 输出数组中每个元素的值
for(i=0; i<5; i++){
for(j=0; j<2; j++){
printf("a[%d][%d] = %d \n", i, j, a[i][j]);
}
}
return 0;
}
结果:
┌──(rootkali)-[~/Desktop/c_test]
└─# vim erweishuzu.c
┌──(rootkali)-[~/Desktop/c_test]
└─# gcc erweishuzu.c -o erweishuzu
┌──(rootkali)-[~/Desktop/c_test]
└─# ./erweishuzu
2
-------------
a[0][0] = 0
a[0][1] = 0
a[1][0] = 1
a[1][1] = 2
a[2][0] = 2
a[2][1] = 4
a[3][0] = 3
a[3][1] = 6
a[4][0] = 4
a[4][1] = 8
六:C传递数组给函数
如果想要在函数中传递一个一维数组作为参数,必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,
因为每种方式都会告诉编译器将要接收一个整型指针。同样地,也可以传递一个多维数组作为形式参数。
方式一:形式参数是一个指针
void myFunction(int *param){
}
方式二:形式参数是一个已定义大小的数组:
void myFunction(int param[10]){
}
方式三:形式参数是一个未定义大小的数组:
void myFunction(int param[]){
}
实例:
现在,让我们来看下面这个函数,它把数组作为参数,同时还传递了另一个参数,根据所传的参数,会返回数组中各元素的平均值:
double getAverage(int arr[], int size){
int i;
double avg;
double sum;
for(i=0; i<size; ++i){
sum += arr[i];
}
avg = sum / size;
return avg;
}
#include <stdio.h>
double getAverage(int arr[], int size); // 函数声明
int main(){
// 带有5个元素的整型数组
int balance[5] = {
1000, 2, 3, 17, 50};
double avg;
// 传递一个指向数组的指针作为参数
avg = getAverage(balance, 5);
// 输出返回值
printf("平均值是: %f", avg);
return 0;
}
结果:
┌──(rootkali)-[~/Desktop/c_test]
└─# vim shuzuhanshu.c
┌──(rootkali)-[~/Desktop/c_test]
└─# gcc shuzuhanshu.c -o shuzuhanshu
┌──(rootkali)-[~/Desktop/c_test]
└─# ./shuzuhanshu
平均值是: 214.400000
边栏推荐
- 2021:passage retrieval for outside knowledgevisual question answering
- Ldr6028 OTG data transmission scheme for mobile devices while charging
- 2021:adavqa: overlapping language priors with adapted margin cosine loss *
- 2021:Passage Retrieval for Outside-KnowledgeVisual Question Answering通道检索的外部知识视觉问答
- Human soberness: bottom logic and top cognition
- How to make ef core 6 support dateonly type
- USB DRIVER
- 2021:Graphhopper: Multi-Hop Scene Graph Reasoning for Visual Question Answering
- 苹果手机证书构体知识
- Building lightweight target detection based on mobilenet-yolov4
猜你喜欢

2020:MUTANT: A Training Paradigm for Out-of-Distribution Generalizationin Visual Question Answering

2021:Beyond Question-Based Biases:Assessing Multimodal Shortcut Learning in Visual Question Answeri

math_数集(数集符号)和集合论

Nignx configuring single IP current limiting

Static timing analysis OCV and time derive

IOS development: understanding of dynamic library shared cache (dyld)

Matlab | drawing of three ordinate diagram based on block diagram layout

Penetration test - directory traversal vulnerability

使用promise的基本功能【四、Promise源码】

Learn crypto from Buu (Zhou Geng)
随机推荐
JMeter distributed pressure measurement
GAMES101作业7提高-微表面材质的实现过程
日志收集系统
How to make ef core 6 support dateonly type
Anaconda3安装过程及安装后缺失大量文件,没有scripts等目录
2021:Beyond Question-Based Biases:Assessing Multimodal Shortcut Learning in Visual Question Answeri
IDEA中好用的插件
PostgreSQL基础命令教程:创建新用户admin来访问PostgreSQL
手机新领域用法知识
Is the truth XX coming? Why are test / development programmers unwilling to work overtime? This is a crazy state
2021:Graphhopper: Multi-Hop Scene Graph Reasoning for Visual Question Answering
乐得瑞LDR6035 USB-C接口设备支持可充电可OTG传输数据方案。
Further exploration of handler (Part 2) (the most complete analysis of the core principles of handler)
如何系统学习LabVIEW?
WPF 开源控件库Extended WPF Toolkit介绍(经典)
Office VR porn, coquettish operation! The father of Microsoft hololens resigns!
Promise source code class version [III. promise source code] [detailed code comments / complete test cases]
真xx相来了?测试/开发程序员为什么不愿意加班,这是个疯狂的状态......
百度飞桨“万有引力”2022首站落地苏州,全面启动中小企业赋能计划
Servlet and JSP final review examination site sorting 42 questions and 42 answers