C语言第五讲

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";

学习建议

多练习数组的声明、初始化和访问

理解指针与地址的关系,通过画图帮助理解

注意字符串与字符数组的区别

通过实际编程加深对多维数组的理解