一.数组的定义

数组就是在内存中连续的相同类型的变量空间。

二.数组在内存中的存储方式

同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的,数组名是一个地址的常量,代表数组中首元素的地址。

三.数组的初始化

3.1 一维数组初始化

  1. int a[] = { , , };
  2. int a[] = { };
  3. int a[] = {,,,,,,,,,};
  4. int a[] = {,,,,,,,,,}; // 此写法与上面的写法是等价的

注意:

在C语言中,数组未初始化就使用是极其危险的,系统会为数组中的每一个元素指定一个随机的值,因此在使用数组之前最好先初始化。

练习1:将指定数组反转

定义下列数组

int a[10] = {0,1,2,3,4,5,6,7,8,9};

将该数组中的元素进行反转(最大值在前,最小值在后)。

  1. #include <stdio.h>
  2.  
  3. void main() {
  4.  
  5. int a[] = {,,,,,,,,,};
  6.  
  7. // int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  8.  
  9. for (int i = ; i < ;i++) {
  10.  
  11. printf("a[%d]=%d\n",i,a[i]);
  12. }
  13.  
  14. printf("------------------ 将数组反转 ------------------\n");
  15.  
  16. int min = ; // 记录当前数组的最小下标
  17. int max = ; // 记录当前数组的最大下标
  18.  
  19. while (min < max) {
  20. int tmp = a[min]; // 记录当前较小下标的值
  21. a[min] = a[max]; // 将较大下标值赋值给较小下标的值
  22. a[max] = tmp; // 将较小下标的值赋值给较大下标的值
  23. min++;
  24. max--;
  25. }
  26.  
  27. for (int i = ; i < ; i++) {
  28. printf("a[%d]=%d\n",i,a[i]);
  29. }
  30.  
  31. system("pause");
  32.  
  33. }

运行结果:

 练习2:遍历数组

上面的遍历方式虽然可以使用,但是相对死板,假如数组a变为了:

  1. int a[] = {,,,,,,,,,9,10,11,12};

则for循环中i的值也应做相应的修改。推荐写法:

  1. void main() {
  2.  
  3. int a[] = { , , , , , , , , , 9,10,11 };
  4.  
  5. for (int i = ; i < sizeof(a) / sizeof(int); i++) { // int 类型占4个字节,sizeof(a)一共占40个字节,求得一共有10个元素
  6. printf("a[%d]=%d\n",i,a[i]);
  7. }
  8.  
  9. system("pause");
  10. }

可以利用sizeof来妥善解决上面的问题。

练习3:求一个数组中的最大值和最小值的下标

已知一个数组为

  1. int a[] = {,,,,,,,,,,,,};

求其最大值和最小值的下标

  1. void main() {
  2.  
  3. // 找出该数组中最大值和最小值元素的下标
  4. int a[] = {,,,,,,,,,,,,};
  5. int min = a[]; // 最小值
  6. int max = a[]; // 最大值
  7. int min_loc = ; // 最小值下标
  8. int max_loc = ; // 最大值下标
  9.  
  10. for (int i = ; i < sizeof(a) / sizeof(int); i++) {
  11. if (a[i] > max) {
  12. max = a[i];
  13. max_loc = i;
  14. }
  15.  
  16. if (a[i] < min) {
  17. min = a[i];
  18. min_loc = i;
  19. }
  20. }
  21.  
  22. printf("最大值:%d,最小值:%d\n",max,min);
  23. printf("最大值的下标为:%d,最小值的下标为%d\n",max_loc,min_loc);
  24.  
  25. system("pause");
  26.  
  27. }

练习4:查找数组中大于平均值的元素

已知一个数组为:

  1. int a[] = { , , , , , , , , , , , ,};

查找该数组中大于平均值的元素

  1. void main() {
  2.  
  3. /* 查找数组中大于平均值的元素 */
  4. int a[] = { , , , , , , , , , , , ,};
  5.  
  6. int num = sizeof(a) / sizeof(int); // 计算当前元素个数
  7. int total = ; // 计算当前元素总和
  8. for (int i = ; i < num; i++) {
  9. total += a[i];
  10. }
  11. int avg = total / num; // 计算当前数组平均值
  12. for (int i = ; i < num; i++) {
  13. if (a[i] > avg) {
  14. printf("%d\n",a[i]);
  15. }
  16. }
  17. system("pause");
  18.  
  19. }

执行结果:

四.二维数组的定义及初始化

  1. // 二维数组的定义
  2. int a[][] = { {,,,}, {,,,}, {,,,} };
  3. // int a[3][4] = { {1,2,3,4}, {5,6,7,8} }; // 正确,只初始化前两个维度
  4. // int a[][4] = { { 1, 2, 3, 4 }, {5,6,7,8} }; 正确
  5. // int a[2][] = { { 1, 2, 3, 4 }, {5,6,7,8} }; 这种写法是不对的
  6. // int a[][] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; 这种写法是不对的

练习1:遍历二维数组

  1. void main() {
  2.  
  3. // 二维数组的定义
  4. int a[][] = { {,,,}, {,,,}, {,,,} };
  5. // int a[3][4] = { {1,2,3,4}, {5,6,7,8} }; // 正确,只初始化前两个维度
  6. // int a[][4] = { { 1, 2, 3, 4 }, {5,6,7,8} }; 正确
  7. // int a[2][] = { { 1, 2, 3, 4 }, {5,6,7,8} }; 这种写法是不对的
  8. // int a[][] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; 这种写法是不对的
  9.  
  10. // 遍历当前二维数组
  11. int num_1 = sizeof(a) / sizeof(a[]); // 一维数组元素个数
  12. int num_2 = sizeof(a[]) / sizeof(a[][]); // 二维数组元素个数
  13.  
  14. for (int i = ; i < num_1; i++) {
  15.  
  16. for (int j = ; j < num_2; j++) {
  17. printf("a[%d][%d]=%d\t",i,j,a[i][j]);
  18. }
  19. printf("\n");
  20. }
  21.  
  22. system("pause");
  23. }

执行结果:

C语言基础(10)-数组的更多相关文章

  1. R语言基础:数组&列表&向量&矩阵&因子&数据框

    R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...

  2. Go语言基础之数组

    Go语言基础之数组 本文主要介绍数组(array)及它的基本使用. Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化 ...

  3. GO学习-(8) Go语言基础之数组

    Go语言基础之数组 Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 基本语法: // 定义一个长度为3元素类型为 ...

  4. Java之--Java语言基础组成—数组

    Java语言基础组成-数组 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的数组,数组 ...

  5. 第二十四节:Java语言基础-讲解数组的综合应用

    数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...

  6. C语言基础知识-数组和字符串

    C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...

  7. go语言基础之数组比较和赋值

    1.go语音基础之数组比较和赋值 示例: package main //必须有个main包 import "fmt" func main() { //支持比较,只支持 == 或 ! ...

  8. js脚本语言基础和数组

    js和PHP中,字符串赋值:要使用"双引号"或"单引号"引起来:例如:var c="你好"不同类型进行数学运算,要转换,类型转换:强制转换p ...

  9. C语言基础 (10) 变量作用域,生命周期 内存结构

    01 课程回顾 1.指针数组 注意: 对于数组来说,在使用sizeof的时候a和&a[0]是不一样的, 虽然以%x打印出来他们都是地址 2.值传递 int a; fun(a); int *** ...

随机推荐

  1. Linux 系统中的MySQL数据库默认区分大小写

    今天在开发中遇到这么个问题,将连接的数据库改为服务器上的时候(服务器是Linux系统的),程序跑起来后一直出错,总提示数据库的表找不到, 而打开数据库看该表明明是存在的,在我的印象中MySQL数据是不 ...

  2. 关于Mysql 触发器

    首先,测试版本 Mysql 5.6. 然后再看触发器的语法 CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigge ...

  3. Java JDBC Thin Driver 连接 Oracle 三种方法说明(转载)

    一.JDBC 连接Oracle 说明 JDBC 的应用连接Oracle 遇到问题,错误如下: ORA-12505,TNS:listener does not currently know of SID ...

  4. CentOS安装JDK-1.7

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 准备用rpm下载前,看系统是否已经安装有JDK,如果没有则进入正式安装步骤. # rpm -qa | grep jd ...

  5. [iOS]技巧集锦:UICollectionView在旋转屏幕后Cell中的约束不起作用或自动布局失效

    这似乎是iOS的一个BUG(ref: stackoverflow的大神们讲的) 解决方案 在继承自UITableViewCell的子类中的init方法中加入如下设置: self.contentView ...

  6. iOS开发常用代码块

    遍历可变数组的同时删除数组元素 NSMutableArray *copyArray = [NSMutableArray arrayWithArray:array]; NSString *str1 = ...

  7. 《Note --- Unreal 4 --- B project --- Second UV issue》

    Second uv 可以通过editor来生成: 这部分内容都是在staticMeshEditor这个文件夹下面的代码里: 关于UI的相应机制,有个文件UICommandList.cpp例如我点击st ...

  8. java基础算法之插入排序

    一.插入排序介绍 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通 ...

  9. 图像处理中任意核卷积(matlab中conv2函数)的快速实现。

    卷积其实是图像处理中最基本的操作,我们常见的一些算法比如:均值模糊.高斯模糊.锐化.Sobel.拉普拉斯.prewitt边缘检测等等一些和领域相关的算法,都可以通过卷积算法实现.只不过由于这些算法的卷 ...

  10. [LeetCode] Flatten Nested List Iterator 压平嵌套链表迭代器

    Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...