目录

  • 1 计算机概述
    • 1.1 计算机简介
    • 1.2 计算机系统
    • 1.3 数值在计算机中的表示
  • 2 C语言概述
    • 2.1 C语言发展及特点
    • 2.2 C语言程序的运行步骤和开发环境
    • 2.3 简单的C语言程序
  • 3 C语言基础
    • 3.1 变量、常量及数据类型
    • 3.2 运算符和表达式
    • 3.3 输入、输出
  • 4 选择结构
    • 4.1 计算机编程和算法
    • 4.2 if语句
    • 4.3 if嵌套和if多分支
    • 4.4 switch语句
  • 5 循环结构
    • 5.1 while语句和do...while语句
    • 5.2 for语句
    • 5.3 break语句和continue语句
    • 5.4 goto语句构成的循环
    • 5.5 嵌套循环结构
    • 5.6 程序设计举例
  • 6 函数
    • 6.1 函数的定义与调用
    • 6.2 函数的嵌套调用和递归调用
    • 6.3 作用域和生命周期
    • 6.4 章节小结与测试
  • 7 数组
    • 7.1 一维数组及应用
    • 7.2 二维数组及应用
    • 7.3 字符数组
    • 7.4 数组作为函数参数
    • 7.5 章节小结与测试
  • 8 指针
    • 8.1 指针变量
    • 8.2 指针与数组
    • 8.3 指针的多种形态
  • 9 字符串
    • 9.1 字符串概念及输入输出
    • 9.2 字符串函数
    • 9.3 指针与字符串
    • 9.4 章节小结与测试
  • 10 编译预处理
    • 10.1 宏定义
    • 10.2 文件包含
    • 10.3 条件编译
  • 11 结构体、共用体和用户定义类型
    • 11.1 结构体类型变量
    • 11.2 结构体类型数组与指针
    • 11.3 结构体与函数
    • 11.4 用指针处理链表
    • 11.5 共用体
  • 12 位运算
    • 12.1 位运算的概念和运算规则
  • 13 文件
    • 13.1 C文件概述
    • 13.2 文件的打开与关闭
    • 13.3 文件读写
    • 13.4 位置指针的定位
指针变量


题导入:

(一)变量的地址与变量的值

程序中定义的变量,系统根据它的类型给它分配一定长度的内存单元,该内存单元的起始地址即为变量的地址。内存单元的内容就是变量的值。


(二)直接访问与间接访问

直接访问:用变量名直接从它对应的地址存取内容。

间接访问:定义一个存放地址的变量p(p的地址1500),将x的地址2200存放在变量p中,通过变量P取出地址2200,再按此地址存取其中的内容,就间接的完成了对x的存取。

当P的内容改为2202时,通过变量p取出地址2202,再按此地址,存取的就是变量y的内容。

访问变量y必须先访问变量p

p就是指针变量

p指向y



(一)指针变量的定义

格式:基类型名 *指针变量名

*:表示此变量名为指针类型,无实际意义,只是一个标号。

如:int *p;  //p为指针变量,指向变量的类型为int


(二)指针变量的初始化

用 =&变量名 给指针变量赋初值

要求:此变量名已经定义,且类型与其基类型一致

int x;

int *p=&x;

可用赋值语句给指针变量赋值

float y,*p;

p=&y;

(一)指针变量的引用

直接使用其变量名

int x,*p;

p=&x;

引用指针变量所指向的变量时,用 *指针变量名

*p=5;

注意:

(1)指针变量的值与它所指向的变量的值的差别

(2)指针变量只有正确赋值后,才能通过它访问指向的变量


(二)指针变量的运算

1)& 取地址运算符

        &a   取变量a的地址

2)* 指向运算符,也称间接访问运算符

        *p  取指针变量p指向的变量

3)算术运算

        p++ p--

        p+n  p-n

        p1-p2

4)关系运算

        p1<p2  pi>p2  p1==p2 

        p==0 p==NULL (是否为空指针)P!=0



以指针类型为函数的参数,作用是将变量的地址传入函数。

程序举例:

#include<stdio.h>
void swap(int *p1,int *p2)
{
 int t;
 t=*p1;*p1=*p2;*p2=t;
}

int main()
{
 int a=5,b=3;
 int *pt1=&a,*pt2=&b;
 swap(pt1,pt2);
 printf("a=%d,b=%d\n",a,b);
}

地址传递:是一种双向传递,形参与实参共同指向同一块内存空间