C语言入门篇(六)上

简介: C语言入门篇(六)上

1. 一维数组


数组是一组相同类型元素的集合。(存放一组数)


1.1 数组的创建

数组创建方式:


type_t arr_name [const_n];
//type_t    指数组的元素类型
//const_n   常量表达式,指定数组的大小

🍤数组创建实例:


int arr[9];
//不同数据类型的数组
char arr2[10];
float arr3[9];
double arr4[5];
//下面是一个错误例子:
int n=9;
int arr1[n];//[]中必须是常量表达式

🍩注:

数组创建,在C99标准之前,[ ]中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。


1.2 数组的初始化

数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值。


比如:


int arr1[10] = {1,2,3,4,5,6,7,8,9,10};//完全初始化
int arr2[10] = { 1,2,3 };//不完全初始化,剩余的元素默认都是0
int arr3[10] = { 0 };//不完全初始化,剩余的元素默认都是0
int arr4[] = { 0 };//省略数组的大小,数组必须初始化,数组的大小是根据初始化的内容来确定
char arr5[]={'a','c',9};
char arr6[]="abc";
char arr7[3]={'a','b','c'};
int arr8[];//错误

🍩数组在创建的时候如果想不指定数组的确定的大小就得初始化。


🍩数组的元素个数根据初始化的内容来确定。


1.3 数组的使用

对于数组的使用我们之前介绍了一个操作符:[],下标引用操作符。它就是数组访问的操作符。


下图是一个长度为 10 的数组,第一个元素的索引值为 0,第九个元素的索引值为 8:

e9b71b4d1c58e403bb01d6b1a15f6ed9_3f6046b6d4c04557af41a99f4c88400e.png


对数组元素进行索取:

1cea56320deb20334277187ab0d293a4_27eccd26b1ab48dcb04ca52c5213acc8.png


🍤实例1:计算数组元素个数


#include <stdio.h>
int main()
{
  int arr[10] = {1,2,3,4,5,6,7,8,9,10};//数组的不完全初始化
  int sz = sizeof(arr) / sizeof(arr[0]);  //计算数组的元素个数
  printf("%d\n",sz);
  return 0;
}

🍩sizeof:返回一个对象或者类型所占的内存字节数


🍤实例2:输出数组元素


#include <stdio.h>
int main()
{
  int arr[10] = { 0 };//数组的不完全初始化
  //对数组内容赋值,数组是使用下标来访问的,下标从0开始。
  int i;//做下标
  for (i = 0; i < 10; i++)//定义的数组有10个元素,所以下标是从0-9
  {
    arr[i] = i;
  }
  //输出数组的内容
  for (i = 0; i < 10; ++i)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}

在不知道数组长度的情况下,该如何控制for语句的循环条件?


🍤实例3:

#include<stdio.h>
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int i = 0;
  int sz = sizeof(arr) / sizeof(arr[0]);
  //将i<10改为i<sz
  for (i = 0; i < sz; i++)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}

🍩数组是使用下标来访问的,下标是从0开始。


🍩数组的大小可以通过计算得到。


//计算数组大小
int arr[10];
int sz = sizeof (arr)/sizeof(arr [0]);

1.4 数组在内存中的存储

我们先看一段代码:


#include<stdio.h>
int main()
{
  int arr[10] = { 1,2,3,4,5 };
  int sz = sizeof(arr) / sizeof(arr[0]);//计算数组大小
  int i = 0;
  for (i = 0; i < sz; i++)
  {
    printf("&arr[%d] = %p\n", i, &arr[i]);//%p -- 用来打印地址
  }
  return 0;
}

运行结果:

e84349ab6081c55628049d9be10deb94_4129f7e856b240fdbc06e677e6918da6.png


在内存中的存储地址:

150f2cc3c09448594b77675c6a1a97ed_1286564d5a7e4fcda5711773ab606ffd.png


仔细观察,可以发现后一个元素的地址比前一个元素的地址增4

说明了:数组在内存中是连续存放的,而且由高到低。


2. 二维数组


1.1 数组的创建

int arr[3][4];//3行4列
char arr[3][5];
float arr[1][3];

1.2 数组的初始化

//数组初始化
int arr[3][4] = {1,2,3,4};
int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int arr[][4] = {{2,3},{4,5}};//二维数组如果有初始化,行可以省略,列不能省略

🍩二维数组的行可以省略,但列不能省


比如:有二维数组


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

bad60f357081e385196db60a4a3054a1_50ca957502144a73a9409ee7a78f82a0.png


如果只知道行,无法确定(推出)数组的列数

如果知道了列,就知道了下一行从哪里开始


相关文章
|
2月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
68 2
|
18天前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
71 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
2月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
35 1
|
2月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
4月前
|
C语言
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
5月前
|
存储 Java C语言
【C语言入门】初识C语言:掌握编程的基石
【C语言入门】初识C语言:掌握编程的基石
71 4
【C语言入门】初识C语言:掌握编程的基石
|
4月前
|
NoSQL Java 编译器
C语言从入门到精通该怎样学?
持续学习与实践:编程是一门需要不断学习和实践的技能,要保持对新技术和新知识的敏感性,并持续进行编程实践。
66 1
|
5月前
|
存储 Java 程序员
【C语言入门】C语言入门:探索编程世界的基础概念
【C语言入门】C语言入门:探索编程世界的基础概念
119 2
|
5月前
|
前端开发 C语言 C++
C语言入门02---环境搭建
C语言入门02---环境搭建
|
6月前
|
存储 Web App开发 算法
c语言的简单入门
熟悉c语言(简单入门)