目录

  • 1 第一章 C语言基本概念
    • 1.1 本章学习目标与教学重点、难点
    • 1.2 第一节 C语言环境的安装与应用
    • 1.3 第二节 C程序的设计初步了解
    • 1.4 知识点总结
    • 1.5 复习思考题
    • 1.6 参考文献
    • 1.7 扩展阅读
  • 2 第二章 C语言的基础知识
    • 2.1 本章学习目标与教学重点、难点
    • 2.2 第一节 常量与变量
    • 2.3 第二节 运算符与表达式
    • 2.4 知识点总结
    • 2.5 复习思考题
    • 2.6 参考文献
    • 2.7 扩展阅读
  • 3 第三章 顺序结构
    • 3.1 本章学习目标与教学重点、难点
    • 3.2 第一节 顺序结构
    • 3.3 知识点总结
    • 3.4 复习思考题
    • 3.5 参考文献
    • 3.6 扩展阅读
  • 4 第四章 选择结构
    • 4.1 本章学习目标与教学重点、难点
    • 4.2 第一节 关系运算和逻辑运算
    • 4.3 第二节 if语句
    • 4.4 第三节 if语句嵌套
    • 4.5 第四节 switch语句
    • 4.6 知识点总结
    • 4.7 实验实践内容
    • 4.8 复习思考题
    • 4.9 参考文献
    • 4.10 扩展阅读
  • 5 第五章 循环结构
    • 5.1 本章学习目标与教学重点、难点
    • 5.2 第一节 for语句
    • 5.3 第二节 while语句
    • 5.4 第三节 do-while语句
    • 5.5 第四节 循环结构的嵌套
    • 5.6 知识点总结
    • 5.7 实验实践内容
    • 5.8 复习思考题
    • 5.9 参考文献
    • 5.10 扩展阅读
  • 6 第六章 函数
    • 6.1 本章学习目标与教学重点、难点
    • 6.2 第一节 函数定义、调用和说明
    • 6.3 第二节 函数参数传递
    • 6.4 第三节 递归调用
    • 6.5 知识点总结
    • 6.6 实验实践内容
    • 6.7 复习思考题
    • 6.8 参考文献
    • 6.9 扩展阅读
  • 7 第七章 数组
    • 7.1 本章学习目标与教学重点、难点
    • 7.2 第一节 一维数组
    • 7.3 第二节 二维数组
    • 7.4 第三节 数组与函数
    • 7.5 知识点总结
    • 7.6 实验实践内容
    • 7.7 复习思考题
    • 7.8 参考文献
    • 7.9 扩展阅读
  • 8 第八章 指针
    • 8.1 本章学习目标与教学重点、难点
    • 8.2 第一节 指针变量
    • 8.3 第二节 指针与函数
    • 8.4 第三节 指针与数组
    • 8.5 知识点总结
    • 8.6 实验实践内容
    • 8.7 复习思考题
    • 8.8 参考文献
    • 8.9 扩展阅读
  • 9 第九章 字符串
    • 9.1 本章学习目标与教学重点、难点
    • 9.2 第一节 字符串
    • 9.3 实验实践内容
    • 9.4 知识点总结
    • 9.5 复习思考题
    • 9.6 参考文献
    • 9.7 扩展阅读
知识点总结


引言

内存空间或变量的地址 - 指针

存放地址的变量(地址变量)- 指针变量

一、地址(指针)、地址变量(指针变量)概念及变量的存取方式

1、内存、内存地址 - 物理存储器的概念

2、变量、变量名、变量的地址、变量值 - 高级语言的存储器概念

3、指针、变量的指针、指针变量

4、系统访问变量的两种方式

(1)  直接访问-按变量名、按地址(本质按地址)

(2)  间接访问

二、指针变量的定义(变量先定义后使用)

1、定义格式:

类型名       *指针变量名

2、说明: (1)指针变量基类型-指针变量指向数据的类型

    (2)指针变量存放地址值,本身占用空间2字节

三、指针变量的赋值(使用未赋值指针等同于向一个随机的内存中写入数据)

1、将地址直接赋值给指针变量。例如,float *f=malloc(4);(补充)

2、将变量地址赋值给指针变量。例如:float a,*p;p=&a;

四、指针变量的引用

1、&运算符(取地址运算符)  

2、*运算符(指针运算符、间接访问运算符)

五、指针变量作为函数的参数

变量可以作为函数参数,指针变量同样可以作为函数参数。使用指针作为函数参数,可以在函数中对指针所指向变量的值进行处理(修改)。

指针作为函数参数,本质上同样是单向传值,但是由于传递的是地址值,所以可以通过地址值间接修改形参、实参共同指向的变量。

例:输入a,b两个数交换后输出。

在swap函数中使用两个指针作为函数参数,对两个指针所指向变量值进行交换。

结论:

1要在被调用函数中,修改主调函数的变量值应当:

(1)将主调函数变量的地址传递给被调用函数,就是说函数应当传递的是变量的地址。

(2)被调用函数的形参应当使用指针变量接受主调函数的地址值。

(3)在被调用函数中通过形参指针变量间接访问,修改实参、形参地址所共同指向的变量。本例的操作是交换两个指针变量所指向的变量。

2、函数使用指针作为参数,可以增加主调函数与被调函数之间数据沟通的渠道。

六、指向数组的指针变量

1、指向数组的指针变量:就是指向数组元素的指针变量,也就是指向基类型的指针变量并将其初始化指向数组。

例如:数组int a[10];其中每个元素为整型变量。可以定义一个指向整型变量的指针变量int*p;并将p初始化为&a[0]或a。此时可以将p称为指向数组的指针变量。

2、数组的指针变量的定义和初始化

数组基类型 *p; p=数组名;/* p=&数组名[0] */

或:数组基类型 *p=数组名;

七、通过指针引用数组元素  (假设int a[100];  int *p=a; 即指针p指向数组)

1、指针a+i、指针变量p+i的含义。存在a[i]、是否有p[i]?-C允许p[i]!

2、指针与数组的关系。数组元素可以用下标访问,也可以用指针访问。

3、通过指针引用数组元素。

(1)数组元素的地址表示:&a[i],p+i,a+i。

(2)数组元素的访问:a[i],*(p+i),*(a+i)。

指向数组的指针变量,数组名在许多场合可以交换使用。a[i]甚至可以表示为p[i]

注意:

(1)引用数组元素可以采用下标法和指针法。(假设p=a)

下标法:a[i],p[i];指针法:*(a+i),*(p+i)

(2)数组名是常量指针,指向数组的指针变量是变量。例10-3.P141-P142。

(3)注意:使用数组的指针变量,如果改变了其值,那么应当关注其当前指向的位置。必要时可以重置指针。

八、数组名作为函数参数(基本等价于用指向数组的指针作函数参数)

1、形参数组的数组名b接受了实参数组a的首地址-不严格。接受地址的变量是指针变量。

C编译系统将形参数组名作为数组的指针变量来处理。所以形参float b[]即:float *b。

2、数组作为函数参数,使用指针更加灵活。

注意:指针在移动。