> 文章列表 > C程序设计语言——八、指针(1)指针和指针变量

C程序设计语言——八、指针(1)指针和指针变量

C程序设计语言——八、指针(1)指针和指针变量

目录

目录

一、指针的概念

1、小概念

2、p=&i;        *p=i

3、指向就是通过地址来体现的

4、指针变量

二、变量的两个物理意义

1、指针:一个变量的地址

2、指针变量:专门存放变量地址的变量

3、指针p指向了变量a:p保存了a的地址   p=&a

三、指针变量的定义

1、基类型   *指针变量名;       如:int *p1,*p2;

2、注意

四、指针变量的赋值

1、初始化赋值

2、赋值

3、指针使用说明

五、指针变量的引用

1、格式:*指针变量       

2、运算符:&、*

3、知识点

4、《输入两个数,使其从大到小输出》

六、指针变量作为函数参数

1、实参、形参 = 数组名

2、实参 = 数组名,形参 = 指针变量

3、实参、形参 = 指针变量

4、实参 = 指针变量,形参 = 数组名

5、《利用指针变量作为函数参数,以及编程子函数,内容实现了交换》

七、指针使用注意事项

1、指针指向哪里,必须指向一块有意义的内存;

2、未初始化的指针不能使用;先定义,后赋值,再使用,如果未初始化,指针为“野指针”;

3、指针变量和普通变量的区别


一、指针的概念

1、小概念

  1. 由于通过地址能找到所需的变量单元,地址指向变量单元;
  2. 一个变量的地址称为该变量的“指针”,地址可以称为“指针”

2、p=&i;        *p=i

  1. p = &i    把i的地址存放在p的存储单元中;
  2. *p = i     把i的存储单元中的数据存放在p的存储单元中

3、指向就是通过地址来体现的

4、指针变量

  1. 专门存放另一个变量的地址的变量为“指针变量”;
  2. 指针变量的值是地址(指针)

二、变量的两个物理意义

变量值        变量地址

1、指针:一个变量的地址

2、指针变量:专门存放变量地址的变量

3、指针p指向了变量a:p保存了a的地址   p=&a


三、指针变量的定义

1、基类型   *指针变量名;       如:int *p1,*p2;

2、注意

  1. 指针变量也是变量,在内存中也要占用一定的内存单元,但所有类型的指针变量都占用同样大小的内存,16位=2B、32位=4B
  2. 指针变量前面的“ * ”,表示该变量的类型为指针型变量


四、指针变量的赋值

1、初始化赋值

  1. 基类型  *指针名 = 初始化地址值;int i;int *p = &i;

2、赋值

  1. int i,*p;p=&i;

3、指针使用说明

  1. 在定义指针变量时必须指定基类型
  2. 使用指针变量时,要与基类型一致:float a;int *p = &a;错误
  3. 指针变量中只能存放地址,不要将一个整数赋给一个指针变量:int *p;p=89;错误;
  4. 相同基类型的指针变量可以相互赋值:int a,b;int *p1,*p2;p1=&a;p2=p1;
  5. 可以用NULL对指针变量赋值,使其不指向任何变量:int *p;*p=NULL;

五、指针变量的引用

1、格式:*指针变量       

  1. *为指针运算符;
  2. int a,*p;p=&a;*p=10 (相当于 a=10);

2、运算符:&、*

  1. &:取地址运算符
  2. *:取内容指针运算符(或称“间接访问”运算符)

3、知识点

  1. 指针变量,先定义,后赋值,再使用;
  2. 没有赋值的指针变量是没有任何意义的,是不允许使用的野指针;
  3. 指针变量只能指向定义时所规定类型的变量;
  4. p与&a等价、*p与a等价

4、《输入两个数,使其从大到小输出》

//输入两个数,使其从大到小输出——其一:内容交换
#include<stdio.h>
void main()
{int *p1,*p2,p,a,b;p1=&a;p2=&b;scanf("%d,%d",p1,p2);if(*p1<*p2){p=*p1;*p1=*p2;*p2=p;}printf("a=%d,b=%d\\n",a,b);printf("max=%d,min=%d\\n",*p1,*p2);
}
/*/
//输入两个数,使其从大到小输出——其二:指向交换
#include<stdio.h>
void main()
{int *p1,*p2,*p,a,b;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("max=%d,min=%d\\n",*p1,*p2);
}

六、指针变量作为函数参数

1、实参、形参 = 数组名

2、实参 = 数组名,形参 = 指针变量

3、实参、形参 = 指针变量

4、实参 = 指针变量,形参 = 数组名

5、《利用指针变量作为函数参数,以及编程子函数,内容实现了交换》

#include<stdio.h>
void main()
{void swap(int *p1,int*p2);int a,b,*pa,*pb;pa=&a;pb=&b;scanf("%d%d",&a,&b);swap(pa,pb);printf("%d,%d",a,b);
}
void swap(int *p1,int *p2)
{int temp;	//普通变量temp=*p1;	//赋值*p1=*p2;*p2=temp;
}

七、指针使用注意事项

1、指针指向哪里,必须指向一块有意义的内存;

2、未初始化的指针不能使用;先定义,后赋值,再使用,如果未初始化,指针为“野指针”;

3、指针变量和普通变量的区别:

  1. 相同点:
    1. 都占有内存单元,有相应的地址;
    2.  先定义,后使用!!! 
  2. 指针变量的特殊性:
    1. 指针变量的内容只能是地址;
    2.  必须初始化 (有明确指向)
    3. 参与运算有限:赋值、关系运算、自增、自减、加、减

拜拜~