目录

  • 1 第一章 C语言简介
    • 1.1 C语言前世今生
    • 1.2 主流开发环境介绍
    • 1.3 第一个小程序解析
    • 1.4 常见编译错误
    • 1.5 章节知识点小结
  • 2 算法基础
    • 2.1 算法-程序的灵魂
    • 2.2 算法的描述-流程图
  • 3 数据类型与运算符
    • 3.1 数据描述
    • 3.2 运算符和表达式1
    • 3.3 运算符和表达式2
    • 3.4 章节知识点小结
  • 4 顺序结构程序设计
    • 4.1 输入和输出
    • 4.2 顺序结构程序设计
    • 4.3 章节知识点小结
  • 5 选择结构程序设计
    • 5.1 关系运算符和关系表达式
    • 5.2 逻辑运算符和逻辑表达式
    • 5.3 if语句
    • 5.4 条件运算符
    • 5.5 switch语句
    • 5.6 章节知识点小结
  • 6 循环结构程序设计
    • 6.1 while循环结构
    • 6.2 do_while循环结构
    • 6.3 for循环结构
    • 6.4 循环的嵌套
    • 6.5 break语句和continue语句
    • 6.6 章节知识点小结
  • 7 数组
    • 7.1 一维数组
    • 7.2 二维数组
    • 7.3 字符数组
    • 7.4 章节知识点小结
  • 8 函数
    • 8.1 子程序设计
    • 8.2 函数定义
    • 8.3 函数的调用
    • 8.4 局部变量和全局变量
    • 8.5 参数传递
    • 8.6 函数递归调用
    • 8.7 章节知识点小结
  • 9 指针
    • 9.1 指针的基本概念
    • 9.2 指针变量的定义及引用
    • 9.3 通过指针引用数组元素
    • 9.4 指向多维数组的指针和指针变量
    • 9.5 用指向数组的指针作函数参数
    • 9.6 指针与字符串
    • 9.7 函数指针和指针函数
    • 9.8 章节知识点小结
  • 10 用户自己建立数据类型
    • 10.1 定义和使用结构体变量
    • 10.2 使用结构体数组
    • 10.3 结构体指针
    • 10.4 章节知识点小结
  • 11 编译预处理
    • 11.1 宏定义预处理
    • 11.2 文件包含预处理
    • 11.3 条件编译预处理
    • 11.4 章节知识点小结
  • 12 文件
    • 12.1 文件的基本知识
    • 12.2 文件的基本操作
    • 12.3 章节知识点小结
指针变量的定义及引用

定义指针变量的一般形式为:


       类型  * 指针变量名;

如:int *pointer_1, *pointer_2;

int是为指针变量指定的“基类型”

基类型指定指针变量可指向的变量类型

如pointer_1可以指向整型变量,但不能指向浮点型变量

•下面都是合法的定义和初始化:

float *pointer_3;

char *pointer_4;

int  a,b;

int  *pointer_1=&a,*pointer_2=&b;

2.在引用指针变量时,可能有三种情况:

(1)给指针变量赋值。如:p=&a;

(2)引用指针变量指向的变量。如有

   p=&a;  *p=1;   //*p相当于a

   则执行printf(“%d”,*p);  将输出1

(3)引用指针变量的值。如:

printf(“%o”,p);  //以八进制输出a的地址

3.要熟练掌握两个有关的运算符:

(1) &  取地址运算符。

           &a是变量a的地址

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

  如果: 

  int a,*p;

  p=&a;

  则: p指向变量a,*p就代表a。

  *p=1;       (把1赋给a)

例8.2 输入a和b两个整数,按先大后小的顺序输出a和b。

解题思路:用指针方法来处理这个问题。不交换整型变量的值,而是交换两个指针变量的值。

#include <stdio.h>

int main()

{ int *p1,*p2,*p,a,b; 

   printf(“integer numbers:");

   scanf(“%d,%d”,&a,&b);  

   p1=&a;    p2=&b; 

   if(a<b) 

   {  p=p1; p1=p2; p2=p; } 

   printf(“a=%d,b=%d\n”,a,b);

   printf(“%d,%d\n”,*p1,*p2); 

   return 0;

}

注意:

(1)ab的值并未交换,它们仍保持原值

(2)p1p2的值改变了。p1的值原为&a,后来变成&bp2原值为&b,后来变成&a

(3)这样在输出*p1*p2时,实际上是输出变量ba的值,所以先输出9,然后输出5