指针学习记录(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的指向没发生改变。
用指针变量做形参,在函数执行过程中,使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化却保留了下来。
注意:不能通过改变指针形参的值,来改变指针实参的值,这样是不行的,函数调用的“值传递”是单向的,用指针变量做形参也要同样遵守这一规则;

浙公网安备 33010602011771号