- C编程教程
- C - 首页
- C语言基础
- C - 概述
- C - 特性
- C - 历史
- C - 环境搭建
- C - 程序结构
- C - Hello World
- C - 编译过程
- C - 注释
- C - 词法单元
- C - 关键字
- C - 标识符
- C - 用户输入
- C - 基本语法
- C - 数据类型
- C - 变量
- C - 整数提升
- C - 类型转换
- C - 类型强制转换
- C - 布尔值
- C语言中的常量和字面量
- C - 常量
- C - 字面量
- C - 转义序列
- C - 格式说明符
- C语言中的运算符
- C - 运算符
- C - 算术运算符
- C - 关系运算符
- C - 逻辑运算符
- C - 位运算符
- C - 赋值运算符
- C - 一元运算符
- C - 自增和自减运算符
- C - 三元运算符
- C - sizeof 运算符
- C - 运算符优先级
- C - 其他运算符
- C语言中的决策
- C - 决策
- C - if 语句
- C - if...else 语句
- C - 嵌套if语句
- C - switch 语句
- C - 嵌套switch语句
- C语言中的循环
- C - 循环
- C - while 循环
- C - for 循环
- C - do...while 循环
- C - 嵌套循环
- C - 无限循环
- C - break 语句
- C - continue 语句
- C - goto 语句
- C语言中的函数
- C - 函数
- C - 主函数
- C - 按值调用函数
- C - 按引用调用函数
- C - 嵌套函数
- C - 可变参数函数
- C - 用户自定义函数
- C - 回调函数
- C - 返回语句
- C - 递归
- C语言中的作用域规则
- C - 作用域规则
- C - 静态变量
- C - 全局变量
- C语言中的数组
- C - 数组
- C - 数组的特性
- C - 多维数组
- C - 将数组传递给函数
- C - 从函数返回数组
- C - 变长数组
- C语言中的指针
- C - 指针
- C - 指针和数组
- C - 指针的应用
- C - 指针运算
- C - 指针数组
- C - 指针到指针
- C - 将指针传递给函数
- C - 从函数返回指针
- C - 函数指针
- C - 指向数组的指针
- C - 指向结构体的指针
- C - 指针链
- C - 指针与数组
- C - 字符指针和函数
- C - 空指针
- C - void 指针
- C - 悬空指针
- C - 解引用指针
- C - 近、远和巨型指针
- C - 指针数组的初始化
- C - 指针与多维数组
- C语言中的字符串
- C - 字符串
- C - 字符串数组
- C - 特殊字符
- C语言中的结构体和联合体
- C - 结构体
- C - 结构体和函数
- C - 结构体数组
- C - 自引用结构体
- C - 查找表
- C - 点(.)运算符
- C - 枚举(或枚举)
- C - 结构体填充和打包
- C - 嵌套结构体
- C - 匿名结构体和联合体
- C - 联合体
- C - 位域
- C - Typedef
- C语言中的文件处理
- C - 输入和输出
- C - 文件I/O(文件处理)
- C预处理器
- C - 预处理器
- C - 编译指示
- C - 预处理器运算符
- C - 宏
- C - 头文件
- C语言中的内存管理
- C - 内存管理
- C - 内存地址
- C - 存储类
- 其他主题
- C - 错误处理
- C - 可变参数
- C - 命令执行
- C - 数学函数
- C - static关键字
- C - 随机数生成
- C - 命令行参数
- C编程资源
- C - 问答
- C - 快速指南
- C - 速查表
- C - 有用资源
- C - 讨论
C语言中指针与数组
数组 和 指针 是C语言中两个重要的语言结构,它们在许多方面彼此相关。在许多情况下,使用指针执行的任务也可以借助数组来执行。
但是,数组和指针之间存在一些概念上的差异。阅读本章以了解它们的差异以及比较优势和劣势。
C语言中的数组
在C程序中,数组是存储在相邻内存位置的类似类型元素的索引集合。
要声明数组,我们使用以下语法 -
data_type arr_name [size];
大小应为非负整数。例如 -
int arr[5];
数组可以在声明时初始化,其元素以逗号分隔的列表形式放在花括号内。提及其大小是可选的。
int arr[] = {1, 2, 3, 4, 5};
数组中的每个元素都具有唯一的整型索引,从“0”开始。在C语言中,数组的下界始终为“0”,上界为“size – 1”。
数组示例
以下示例显示了如何使用索引下标遍历数组 -
#include <stdio.h> int main (){ /* an array with 5 elements */ int arr[5] = {10, 20, 30, 40, 50}; int i; /* output each array element's value */ printf("Array values with subscripts: \n"); for(i = 0; i < 5; i++){ printf("arr[%d]: %d\n", i, arr[i]); } return 0; }
输出
运行此代码时,将产生以下输出 -
Array values with subscripts: arr[0]: 10 arr[1]: 20 arr[2]: 30 arr[3]: 40 arr[4]: 50
C语言中的指针
C允许您访问编译器随机分配的变量的内存位置。取地址运算符(&)返回变量的地址。
存储另一个变量地址的变量称为指针。指针的类型必须与它存储地址的变量类型相同。
为了与目标变量类型区分开来,指针的名称以星号(*)为前缀。如果我们有一个int变量,则其指针声明为“int *”。
int x = 5; int *y = &a;
注意:在数组的情况下,其第0个元素的地址被分配给指针。
int arr[] = {1, 2, 3, 4, 5}; int *ptr = &arr[0];
事实上,数组的名称本身解析为第0个元素的地址。
因此,我们也可以写 -
int *ptr = arr;
由于数组的元素放置在相邻的内存位置,并且每个下标的地址都增加4(在int数组的情况下),因此我们也可以使用此功能来借助指针遍历数组元素。
指针示例
以下示例显示了如何使用指针遍历数组 -
#include <stdio.h> int main (){ /* an array with 5 elements */ int arr[5] = {10, 20, 30, 40, 50}; int *x = arr; int i; /* output each array element's value */ printf("Array values with pointer: \n"); for(i = 0; i < 5; i++) { printf("arr[%d]: %d\n", i, *(x+i)); } return 0; }
输出
运行代码并检查其输出 -
Array values with pointer arr[0]: 10 arr[1]: 20 arr[2]: 30 arr[3]: 40 arr[4]: 50
C语言中数组和指针的区别
下表重点介绍了数组和指针之间的重要区别 -
数组 | 指针 |
---|---|
它将同类数据类型的元素存储在相邻的内存位置。 | 它存储变量或数组的地址 |
数组定义为相似数据类型的集合。 | 指针是一个存储另一个变量地址的变量。 |
可以存储的变量数量由数组的大小决定。 | 指针只能存储单个变量的地址。 |
数组的初始化可以在定义它们时完成。 | 指针在定义时不能初始化。 |
数组的性质是静态的。 | 指针的性质是动态的。 |
数组不能根据用户的需求调整大小。 | 指针可以在任何时候调整大小。 |
数组的分配在编译时完成。 | 指针的分配在运行时完成。 |
广告