指针学习记录(1)

再次复习一遍指针相关内容,总感觉学的不到位。参考谭浩强的书

8.1概念

  (1)假设定义一个变量i_pointer,用来存放整型变量的地址,可以通过 i_pointer=&i来表示,将i 的地址存放到i_pointer中。

  (2)*i_pointer  代表 i_pointer 指向的对象。

一个变量的地址,称为该变量的指针;  比如 地址2000,是变量i的指针;

如果有一个变量专门存放另一个变量的地址,则称它为 指针变量。也就是说,指针变量是用来存放地址的变量;比如 i_pointer;

1 int *pointer1,*pointer2;
2 printf("%d %d",*pointer1,*pointer2);

注意,两处* 的含义不同。第一行,定义处的* 代表该变量是指针变量;第二行输出时候的* 代表指针变量pointer1 和pointer2 所指向的变量!比如a,b,等;

8.2定义指针变量

(1)指针变量是有基类型的,如 Int*,float*,char* 等;指针的值加1,代表什么意思?如果指针是指向一个整形变量,那么指针移动一个位置代表移动4个字节;

(2)不能将一个整数赋值给一个指针变量; 

8.2.3 引用指针变量

 

一共有3种情况:
1
p=&a; //给指针变量赋值 2 printf("%d",*p); //引用指针变量指向的变量 3 printf("%o",p); //引用指针变量的值,八进制形式输出p的值(地址)

8.2.4 指针变量做函数参数

 

#include<stdio.h>
int main()
{
    int* p1, * p2, * p, a, b;
    void swap(int* m, int* n);   //函数声明
    scanf("%d %d", &a, &b);
    p1 = &a;
    p2 = &b;
    if (a < b)
    swap(p1, p2);
    printf("%d %d", *p1, *p2);
    return 0;
}
void swap(int*m, int*n)  //交换两个参数的值
{
    int temp;
    temp = *m;
    *m = *n;
    *n = temp;
}

  程序思路:主要讲解swap函数的作用,

          (1)swap函数接受到p1和p2指针的值后,传递给m,n,所以现在m 和n 分别指向a ,b;

          (2)swap 函数将*m 和*n的值互换,也就是a 和b 的值发生了互换。

        (3)函数调用结束后,m n 两个临时变量被释放了,不存在了。不过却实在的互换了a b 的值,而且p1 和p2的指向没发生改变。

 

用指针变量做形参,在函数执行过程中,使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化却保留了下来。

注意:不能通过改变指针形参的值,来改变指针实参的值,这样是不行的,函数调用的“值传递”是单向的,用指针变量做形参也要同样遵守这一规则;

 

posted @ 2022-03-12 19:50  雨落城  阅读(53)  评论(0)    收藏  举报