C语言学习(三) 数组 枚举 指针

102 阅读5分钟

C语言 数组 枚举 指针

C 语言数组

数组,实际上是一种数据结构,我们后续的算法学习的时候,最重要的就是对数据结构这些进行操作的

每一种数据结构的话,都是含有增删改查的功能的

数组就是实现的是存储固定大小的具有相同数据类型元素的具有顺序的集合

数组是由连续的内存地址组成的,也就是说明数组中的元素的内存地址是连续的



声明数组

type arrayName [arraySize];
double balance[10];

声明一个数组的时候,我们是需要声明数组中的元素的数据类型以及元素的数量的

type: 指的就是我们的数组的数据类型

arraySlze: 指的就是我们的数组的大小,就是指定里面可以实现存储的元素个数



初始化数组

type arrayName [arraySize] = { elements }
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

进行初始化数组的时候,我们是在 {} 内部实现初始化数组元素的,原则上的话,数组中的元素个数是不能够超过 arraySize

在初始化数组的时候,我们是可以进行的是将 arraySize 进行忽略的,这个是可以由我们的元素个数来实现动态决定的

但是只不过数组还是任然是一个固定长度的,不是动态长度的哟



访问数组元素

数组的话,每个元素都是具备内置的键的,也就是我们常说的下标 index,数组的下标是从 0 开始的

我们是可以通过 index 来实现访问我们的数组中的元素的

balance[0];  // 1000.0
​
balance[1];  // 2.0 


获取数组长度的方式

// 1.通过获取数组的字节大小来除以数组中每个元素的字节大小从而得到我们的数组长度
sizeof(arrayName) / sizeof(arrayName[0]);
​
// 2.通过获取数组的字节大小除以元素数据类型来实现得到数组长度
sizeof(arrayName) / sizeof(array_type)


数组名

在 C/C++ 中,数组名表示的就是一个数组的地址,这个地址就是元素的首地址

数组名本身就是一个常量指针

如果想要获取数据中的每个元素的地址值,是可以通过使用 **取址符 & **来实现获取的

虽然数组名表示数组的地址,但在大多数情况下,数组名会自动转换为指向数组首元素的指针

int *ptr = myArray; 
// 等价于
int *ptr1 = &myArray[0];
​
// 上面的两种形式都是来实现访问数组首地址的方式的

后面还会对数组进行一个详细的讲解的,现在了解这一点就够了

后续拓展内容

image-20241028145802160.png



C语言 枚举

枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量,它可以让数据更简洁,更易读

枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性

定义一个枚举类型,需要使用 enum 关键字,后面跟着枚举类型的名称,以及用大括号 {} 括起来的一组枚举常量

枚举变量的定义

enum 枚举名 {枚举元素1,枚举元素2,……};

先定义枚举类型,在定义枚举变量
// 先定义枚举类型
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
​
// 定义枚举变量
enum DAY day;
枚举类型和枚举变量同时定义
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;


C语言 指针

通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的

每一个变量都有一个内存位置,每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址

#include <stdio.h>
 
int main ()
{
    int var_runoob = 10;
    int *p;              // 定义指针变量
    p = &var_runoob;
 
   printf("var_runoob 变量的地址: %p\n", p);
   return 0;
}

指针介绍

指针也就是内存地址,指针变量就是用来实现的是存放内存地址的变量*

定义指针变量的基本的格式形式为: type *variable_name

type 就是指的是指针的数据类型

variable_name 指的就是我们指针变量的名称

使用 * 来指定一个变量时指针变量

在实现使用指针的时候,我们的实现步骤含有两步,一步就是声明指针变量,第二步就是实现将内存地址值赋值给指针变量

#include <stdio.h>
 
int main ()
{
   int  var = 20;   /* 实际变量的声明 */
   int  *ip;        /* 指针变量的声明 */
 
   ip = &var;  /* 在指针变量中存储 var 的地址 */
 
   printf("var 变量的地址: %p\n", &var  );
 
   /* 在指针变量中存储的地址 */
   printf("ip 变量存储的地址: %p\n", ip );
 
   /* 使用指针访问值 */
   printf("*ip 变量的值: %d\n", *ip );
 
   return 0;
}


Null 指针

NULL 指针就是用来实现的是对指针实现初始化的操作

当我们实现定义一个指针变量的时候,没有一个确切的内存地址可以赋值给指针变量,那么这个时候就可以使用 Null 实现赋值

NULL 指针是一个定义在标准库中的值为零的常量

#include <stdio.h>
 
int main ()
{
   int  *ptr = NULL;
 
   printf("ptr 的地址是 %p\n", ptr  );
 
   return 0;
}


指针的操作还有很多很多,后续继续拓展,这里拓展了你们会搞不懂的

后续拓展内容

image-20241028145731253.png

😄 😄 😄