C语言学习笔记:数组

这篇具有很好参考价值的文章主要介绍了C语言学习笔记:数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

✨博文作者:烟雨孤舟
💖 喜欢的可以 点赞 收藏 关注哦~~

✍️ 作者简介: 一个热爱大数据的学习者

✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教!

目录​​​​​​​

简介

数组声明

数组初始化

访问数组元素

多维数组

二维数组

字符数组

传递数组给函数

从函数返回数组

指向数组的指针


简介

C 语言数组数据结构,是一个可以存储固定大小的相同类型元素的顺序集合。数组中的特定元素可以通过索引访问,第一个索引值为 0。数组遵循先定义后使用。

数组声明

声明一个数组,需要指定元素的类型和元素的数量
//数组类型 数组名 [数组大小]; 数组大小不必填,初始化时等于元素个数综合
一维数组:type arrayName [arraySize];
二维数组:type arrayName [arraySize][arraySize];
数组名表示该数组所分配连续内存空间中的第一个单元的地址,即首地址,由于数组空间分配之后就不允许改变,因此数组名是一个地址常量,不允许修改
例如:
double balance[10];
//balance是一个实型的数组,可以容纳10个类型为double的数字。

数组初始化

类型名 数组名 [数组长度] ={初始值表}
数组逐个初始化:
    int a[3]; a[0]=1;a[1]=2;a[2]=4;
数组整体初始化语句:
    double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
先定义数组再赋值:
    int a[2]; a[0]=1;a[1]=2;
数组元素的值通过键盘输入,元素较多可通过循环输入:
    inta[1];
    scanf("%d",&a[0]);
{ } 之间的数目不能大于在数组声明时[ ] 中指定的元素数目。
如果初始化时省略掉了数组的大小,数组的大小则为初始化时元素的个数。
double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
所有的数组都是以0作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去1。
对于数组的初始化需要注意以下几点:
1.可以只给部分元素赋值,当{}中值的个数少于元素个数时,只给前面部分元素赋值,后面的元素自动初始化, 对于short、int、long,就是整数0,对于char就是字符 '\0';对于 float、double,就是小数 0.0。
2.只能给元素逐个赋值,不能给数组整体赋值
 int a[2]={1,1}是正确的;int a[2]=1是错误的

访问数组元素

数组元素可以通过数组名称加索引进行访问。索引是放在方括号内的。
访问数组元素格式:
    数组名[常量表达式];
    double salary = balance[9];
访问数组时,如果[]里有常量计算表达式是对的,[]允许常量表达式。
定义数组后访问数组只能引用单个的数组元素,不能一次性引用整个数组。
数组下标从0开始,下标不能越界,取值单位[0,数组长度-1]。

实例:
#include <stdio.h>
int main ()
{
   int n[10]; /* n 是一个包含10个整数的数组 */
   /* 通过for循环初始化数组元素 */         
   for (int i = 0; i < 10; i++ ){
      n[i] = i + 100; /* 设置元素 i 为 i + 100 */
   }
   /* 输出数组中每个元素的值 */
   for (int j = 0; j < 10; j++ ){
      printf("Element[%d] = %d\n", j, n[j] );
   }
   return 0;
}

//数组所占存储空间的内存:sizeof(数组名);
//数组的大小:sizeof(数组名)/sizeof(数组下标元素);
#include<stdio.h>
int main(){
    int a[]={1,2,3,4,5};
    int b;
    b=sizeof(a)/sizeof(a[0]);
    printf("数组元素个数为:%d",b);
    return 0; 
}
//在我们没有明确数组的元素个数时,在程序中想知道数组单元个数可以使用 sizeof(a)/sizeof(a[0]), sizeof(a)是得到数组的名称,sizeof(a[0])是得到数组a中单个元素的大小

多维数组

 多维数组最简单的形式是二维数组。

多维数组声明的一般形式:
    类型 数组名[数组大小][数组大小][数组大小]
    type name[size1][size2]...[sizeN];
    int threedim[5][10][4];//三维数组5 10 4整形数组

二维数组

二维数组在逻辑上是方阵,由行和列组成。在物理上是线性的,按行来依次进行存放,内存是连续的。

二维数组在本质上是一个声明一个x行y列的二维整型数组,形式如下:
    类型名 数组名 [行长度][列长度]
    类型 数组名[常量表达式x][常量表达式y];
    type arrayName [ x ][ y ];
    int x[3][4];//3行4列的二维数组
type可以是任意有效的数据类型,arrayName是一个有效的标识符。一个二维数组可以被认为是一个带有 x 行和 y 列的表格。
数组中的每个元素是使用形式为 a[i,j] 的元素名称来标识的,a是数组名称,i和 j是唯一标识a中每个元素的下标。

 C语言学习笔记:数组

 二维数组的初始化可以按照按行分段赋值和按行连续赋值
按行分段赋值初始化二维数组:
int a[3][4] = {  
 {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
 {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
 {8, 9, 1, 7}   /*  初始化索引号为 2 的行 */
};
按行连续赋值初始化二维数组://所有元素存在的情况下
int a[3][4] = { 0,1, 2, 3,4,5, 6, 7,8, 9, 1, 7} ;
//所有元素存在的情况下,二维数组在初始化时行可以省略不写,列必须要写
int a[][4] = { 0, 1, 2, 3,4,5, 6, 7,8, 9, 1, 7} ;
在定义数组后赋值:
    可以定义整个数组后逐个赋值也可以用通过循环嵌套的形式键盘输入

 访问二维数组元素:
二维数组中的元素是通过使用下标(数组的行索引和列索引)来进行索引
案例:
#include <stdio.h>
int main ()
{
   /* 一个带有 5 行 2 列的数组 */
   int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
   int i= a[0][2];
   printf("%d",i);
   return 0;
}
读取二维数组的所有数据:(for 循环)
int a[3][3]={{1,1,2},{1,1,2},{1,1,2}}
for(int i =0;i<=2;i++){
for(int j=0;j<=2;j++){
printf("%d",a[i][j]);
}
}
初始化二维数组的所有元素:(for 循环)
int a[3][3];
for(int i =0;i<=2;i++){
for(int j=0;j<=2;j++){
scanf("%d",&a[i][j]);
}
}

字符数组

字符数组的定义
一维字符数组: char c[10];
二维字符数组: char a[3][2];
字符数组初始化
一维字符数组: char a[5]={'f','2','e','w','3'};
             char b[]={'d','d'};
二维字符数组: char c[2][2]={{'q','c'},{'a','s'}};
            char d[][2]={{'q','c'},{'a','s'}};
字符数组的引用:
一维字符数组:数组名[常量表达式];a[1+2]//a[1+2]=a[3]
二维字符数组:数组名[常量表达式x][常量表达式y];a[i][j];
字符输出格式:printf(“%c”,字符名);
字符数组输出格式: printf("%s",数组名);

传递数组给函数

 在函数中传递一个数组作为参数,必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针
方式 1:形式参数是一个指针
    void myFunction(int *param){}
方式 2:形式参数是一个已定义大小的数组
    void myFunction(int param[10]){}
方式 3:形式参数是一个未定义大小的数组
    void myFunction(int param[]){}

案例:
#include <stdio.h>
double getAverage(int arr[], int size);/* 函数声明 */
int main (){
   int balance[5] = {1000, 2, 3, 17, 50};/*数组初始化 */
   double avg;
   avg=getAverage(balance,5) ;/*传递一个指向数组的指针作为参数 */
   printf( "平均值是: %f ", avg );  /* 输出返回值 */
   return 0;
}
double getAverage(int arr[], int size){
  double avg,sum=0;
  for (int i = 0; i < size; ++i){
    sum += arr[i];
  }
  avg = sum / size;
  return avg;
}

 二维数组传递给函数
方法1: 第一维的长度可以不指定,但必须指定第二维的长度:
void print_a(int a[][5], int n, int m)
方法2: 指向一个有5个元素一维数组的指针:
void print_b(int (*a)[5], int n, int m)
方法3: 利用数组是顺序存储的特性,通过降维来访问原数组
void print_c(int *a, int n, int m)

从函数返回数组

C 语言不允许返回一个完整的数组作为函数的参数。可以通过指定不带索引的数组名来返回一个指向数组的指针。
想要从函数返回一个一维数组,必须声明一个返回指针的函数.
int * myFunction(){}

指向数组的指针

通过指定不带索引的数组名称来生成一个指向数组中第一个元素的指针。
数组名是一个指向数组中第一个元素的常量指针
double balance[50];
balance是一个指向&balance[0]的指针,即数组balance的第一个元素的地址文章来源地址https://www.toymoban.com/news/detail-488894.html

到了这里,关于C语言学习笔记:数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端学习C语言 - 数组和字节序

    本篇主要介绍: 一维二维数组 、 字符数组 、 数组名和初始化注意点 以及 字节序 。 初始化 有以下几种方式对数组初始化: Tip :以上写法创建的数组都是 不可变大小的 。 练习1 题目 : int a[5] = {1} ,请问 a 的每个值是多少? 输出: 1 0 0 0 0 。 在C和C++中,当我们创建数组

    2024年02月09日
    浏览(45)
  • C语言学习记录——找数组中的鞍点

    目录 C语言中 鞍点的定义  代码的实现 思路分析图解  指一个矩阵中,即该位置上的元素在该行上最大,在该列上最小。 一个二维数组可能没有鞍点。 例如:1,2,3            4,5,6            7,8,9 该矩阵中,鞍点为3所在的位置。 即数组坐标[ 0 ] [ 2 ],在第一行第三

    2024年02月04日
    浏览(40)
  • C语言学习笔记——C语言结构

    C语言是一种面向过程的结构化的语言,同时具有高级语言和汇编语言的优点 所有的C语言程序经过编译和连接之后才能被计算机执行 头文件是一种特殊的文件,记录了很多可以直接引用头文件然后使用的函数,也可通过#define声明函数、变量、宏等的定义 头文件通常包含在源

    2024年02月11日
    浏览(46)
  • 【go语言学习笔记】05 Go 语言实战

    在做项目开发的时候,要善于借助已经有的轮子,让自己的开发更有效率,也更容易实现。 1. RESTful API 定义 RESTful API 是一套规范,它可以规范如何对服务器上的资源进行操作。和 RESTful API 和密不可分的是 HTTP Method。 1.1 HTTP Method HTTP Method最常见的就是POST和GET,其实最早在

    2024年02月13日
    浏览(46)
  • Go语言学习笔记

    注:安装教程 注:上一篇笔记 注:下一篇笔记 2.6、流程控制 2.6.1、条件语句 2.6.2、选择语句 2.6.3、循环语句 2.6.4、跳转语句 goto语句跳转到本函数内的某个标签 2.7、函数 2.7.1、函数定义 函数构成代码执行的逻辑结构。函数的基本组成为:func、函数名、参数列表、返回值

    2024年02月06日
    浏览(48)
  • 6.Go语言学习笔记-结合chatGPT辅助学习Go语言底层原理

    1、Go版本 2、汇编基础 推荐阅读:GO汇编语言简介 推荐阅读:A Quick Guide to Go\\\'s Assembler - The Go Programming Language 精简指令集 数据传输: MOV/LEA 跳转指令: CMP/TEST/JMP/JCC 栈指令: PUSH/POP 函数调用指令: CALL/RET 算术指令: ADD/SUB/MUL/DIV 逻辑指令: AND/OR/XOR/NOT 移位指令: SHL/SHR JCC有条件跳转: JE

    2024年02月04日
    浏览(41)
  • Go语言学习笔记(三)

    教程:文档 - Go 编程语言 (studygolang.com) 在call-module-code需要注意,需要在hello目录下操作 这是一个在Go项目的模块管理中的命令。在Go的模块管理工具( go mod )中,这个命令用于修改模块依赖关系。 具体来说, go mod edit -replace example.com/greetings=../greetings  这个命令的作用是:

    2024年02月02日
    浏览(48)
  • go语言学习笔记1

    ​ GoLang是一种静态强类型、编译型、并发型,并具有 垃圾回收 功能的编程语言;它可以在不损失应用程序性能的情况下极大的降低代码的复杂性,还可以发挥多核处理器同步多工的优点,并可解决面向对象程序设计的麻烦,并帮助程序设计师处理琐碎但重要的内存管理问题

    2024年02月12日
    浏览(50)
  • Go语言学习笔记(二)

    以下是一些推荐的Go语言学习资源的链接: Go语言教程:https://golang.org/doc/ Go by Example:Go by Example Golang Tutorials:https://golangtutorials.com/ Go语言第一课(慕课网):PHP模糊查询技术案例视频教程-慕课网 Go语言进阶教程(实验楼):极客企业版 Go语言高级编程(GitBook):谁是凶手

    2024年01月20日
    浏览(52)
  • C语言学习笔记<1>

    1. EOF(End of File)是文件结束标志,用于表示文件已经读取完毕。在C语言中,可以通过判断是否读取到EOF来判断文件是否读取完毕。 以下是一个简单的C语言代码示例,用于读取一个文本文件并输出其内容: 2.单步执行 #include Windows.h 是C/C++中引入Windows API头文件的语句,它包

    2024年04月22日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包