欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于指针的笔记【1】【C语言程序设计-谭浩强】

程序员文章站 2022-07-06 08:58:27
指针是什么? 一个 变量的地址称为该变量的"指针"【将地址形象化的称为“指针”】。(指针是什么百度百科) 注意区分储存单元的地址和内容这两个概念的区别。 直接访问:直接按变量名进行访问,直接通过变量名访问变量内容 间接访问:将变量a的地址存放到另一个变量b中,然后通过变量b找到变量a的地址,从而访问 ......

指针是什么?

一个 变量的地址称为该变量的"指针"【将地址形象化的称为“指针”】。(指针是什么百度百科)

  注意区分储存单元的地址和内容这两个概念的区别。

直接访问:直接按变量名进行访问,直接通过变量名访问变量内容

间接访问:将变量a的地址存放到另一个变量b中,然后通过变量b找到变量a的地址,从而访问变量a的内容。

指针变量

一个变量a专门用来存放另一个变量b的地址(即指针),则称变量a为指针变量。

指针变量就是地址变量,用来存放地址,指针变量的值就是地址(即指针)。

注意区分指针与指针变量这两个概念。(指针是一个地址,指针变量是存放地址值的变量)

指针使用例子:

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int a=100,b=10;
 5     //定义整型变量a,b,并初始化
 6     int * pointer_1, * pointer_2;
 7     //定义指向整数型数据的指针变量 pointer_1,pointer_2
 8     pointer_1=&a;
 9     //把变量a的地址赋给指针变量pointer_1
10     pointer_2=&b;
11     //把变量b的地址赋给指针变量pointer_2
12     printf("a=%d,b=%d\n",a,b);
13     //通过变量名直接访问a和b的值
14     printf("* pointer_1=%d, * pointer_2=%d\n", * pointer_1, * pointer_2);
15     //通过指针变量间接访问输出a和b的值
16     
17     return 0;
18 }

 定义指针变量的格式:

      类型名 * 指针变量名;(可以在定义时同时对它初始化)

    类型名是在定义指针变量时必须指定的“基类型”,基类型用来指定此指针变量可以指向的变量的类型。

    因此,指针变量是基本数据类型派生出来的类型,它不能离开基本数据类型而独立存在。

    一个变量的指针的含义包括两个方面,一是一存储单元编号表示的地址,一是它指向的存储单元的数据类型(如 int,char,float等)。

    说明指针变量a时,应该说:a是指向(基本数据类型)的指针变量

引用指针变量

   给指针变量赋值:

      p=&a; //把a的地址赋值给指针变量p

   引用指针变量指向的变量:

      printf("%d", * p);//以整数型式输出指针变量p所指向的变量的值,即变量a的值

      * p =1;  //表示把整数1赋给p当前所指向的变量,如果p指向变量a,则相当于把1赋给a,即“a=1”。

   引用指针变量的值:

      printf("%o",p);//作用是以八进制数型式输出指针变量p的值,如果p指向a,就是输出a的地址,即&a

  注意:熟悉这两个运算符

      1.&  取地址运算符

      2.*   指针运算符(“间接访问”运算符),*p代表指针变量p指向的对象

 

示例代码:
 1 #include <stdio.h>
 2 int main(){
 3     int *p1, *p2, a, b;
 4     printf("please enter two integer numbers:");
 5     scanf("%d,%d",&a,&b);
 6     p1=&a;
 7     p2=&b;
 8     if(a<b){
 9         p1=&b;
10         p2=&a;
11     }
12     printf("a=%d,b=%d\n",a,b);
13     printf("max=%d,min=%d\n", *p1, *p2);
14     return 0;
15 }

 指针变量作为函数参数

 1 #include <stdio.h>
 2 int main(){
 3     void swap(int *pi,int *p2);
 4     int a,b;
 5     int *pointer_1, *pointer_2;
 6     printf("pleadse enter a and b:");
 7     scanf("%d,%d",&a,&b);
 8     pointer_1=&a;
 9     pointer_2=&b;
10     if(a<b){
11         swap(pointer_1,pointer_2);
12     }
13     printf("max=%d,min=%d\n",a,b);
14     return 0;
15 }
16 void swap(int *p1,int *p2){
17     int temp;
18     temp= *p1;
19      *p1= *p2;
20      *p2= temp;
21 }

 可以在函数内通过操作指针,改变函数外数据。