C语言第五讲:数组与指针
第一部分:数组
1.1 一维数组
格式:数组名[数字下标]
以num数组为例:
num[0] num[1] num[2] num[3]
声明与初始化:
int num[4]; // 声明长度为4的整型数组
int num[4] = {5, 7, 9, 1}; // 声明并初始化
int num[4] = {0}; // 所有元素初始化为0
赋值与使用:
num[0] = 6;
num[1] = 2;
if(num[0] == 7) {
scanf("%d", &num[0]);
}
数组中单个元素的使用与该类型的单个变量没有区别。
应用实例:
#include <stdio.h>
int student[10]={0};
int i;
int j;
int main()
{
for(i=0;i<10;i++)
{
printf("请输入学员学号:");
scanf("%d",&j);
printf("学员的成绩为:");
scanf("%d",&student[j-1]);
}
printf("请输入学员的学号:");
scanf("%d",&j);
printf("学员的成绩为%d",student [j-1]);
return 0;
}
1.2 常量数组与字符串
常量数组:
用const关键字定义
代码运行过程中不会被修改的值,节省内存
const char a[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
字符串与字符:
字符串用双引号表示:"hello"
字符用单引号表示:'a'``'b'
字符串是特殊的字符数组
字符数组定义:
char string[3] = {'a', 'b', 'c'};
char string[] = "abc";
占位符:
字符串:%s
字符:%c
1.3 多维数组(以二维为例)
多维数组每个维度同样是从0开始计数的。
第二部分:指针
2.1 指针变量
定义:用来存储地址的变量
指针变量的声明:
int a;
int b;
float c;
int* a_p;
int* b_p;
float* c_p;
指针的使用:
a = 1;
&a = 3
a_p = 3;
*a_p = 1;
2.2 内存模型与指针
以下内存示意图展示了变量与指针的关系:
| 地址 | 存储内容 | 说明 |
|---|---|---|
| 0 | 0000 0001 | |
| 1 | 0000 0011 | |
| 2 | 0000 0001 | |
| 3 | 0000 0000 | 变量a的地址 |
| 4 | 0000 0000 | |
| 5 | 0000 0001 | |
| 6 | 0000 0010 | |
| 7 | 0000 0000 | 指针a_p的地址 |
| 8 | 0000 0011 | |
| 9 | ||
| 10 | ||
| 11 |
理解:
变量a存储在地址3的位置
指针a_p存储在地址7的位置,其值为3(指向地址3)
核心要点总结
数组要点
数组下标从0开始
数组元素可以像普通变量一样使用
常量数组使用const关键字,值不可修改
字符串是以空字符结尾的字符数组
指针要点
指针是存储地址的变量
&运算符获取变量地址
*运算符访问指针指向的值
指针变量需要先指向有效地址才能使用
关键区别
| 概念 | 特点 | 示例 |
|---|---|---|
| 数组 | 连续存储相同类型数据 | int arr[5]; |
| 指针 | 存储内存地址 | int* p = &a; |
| 常量数组 | 值不可修改 | const int list[] = {1,2,3}; |
| 字符串 | 以\0结尾的字符数组 |
char str[] = "hello"; |
学习建议:
多练习数组的声明、初始化和访问
理解指针与地址的关系,通过画图帮助理解
注意字符串与字符数组的区别
通过实际编程加深对多维数组的理解