菜芽 学C之我见三——指针(1)
首先要明确,一个变量在被编译的时候会根据其类型分配一定的长度, 而内存的每一个单元都有唯一的编号与之对应。比如:int 型分配二个字节,在内存中划出二个单元,这二个单元地址是 2000~2001。 指针: 其实就是一个 变量 的 实际 首地址 这里指针指的是 2000 。。。
指针变量: 专门存储指针的变量(也就是某一个具体变量实际地址的首地址)。。。
* :这个标号可以读作“指向”。。。比如:一个已经定义的变量 P ,*p 就是 指向 指针变量P所对应的变量
int i;
int *p;(定义p是一个指针变量)
p = &i;(&,是取地址符号)
那么这段话的意思就是,我先定义一个整型变量i, 再定义一个指针变量p(用来专门存储变量i首地址的变量),然后再将i的首地址取出来(&i)赋值给指针变量p。经过这三条语句后,在输入\输出时调用 *p,此时 *p就指向变量i的内容。
一:为什么定义指针变量的时候要 加 基类型?
首先, 是变量就要先定义后使用;其次就是不同类型的变量长度不一样,这个时候要保证指针变量长度和变量长度一样,才方便进行指针运算。
二:指针变量做函数参数 与 “单向传送”的“值传递”方式的区别。
一开始不太明白什么是参数变化实参不变化,还是参数变化实参发生变化。
1、注意,指针做函数参数时候 声明的时候前加 void 也就是不需要返回值,那么我主调函数要想得到被调函数的结果的时候要怎么办呢? 对,就是要想办法通过参数值的改变来影响实参的值,这样在输出的时候,就会得到你想要的结果。(书上原话:指针变量指向的变量值发生变化,函数在调用结束后,这些变量值的变化依然保留)。
2、“单向传送”的“值传递”; 在函数调用时,有时会要求返回一个值,这时将实参传递给形参,在通过被调函数的函数体得到一个值,用return语句传回主调函数,再输出返回值,但是实参的值没有发生变化。
三:注意的地方
void change(int *p, int *q)
{
int t;//用 t 而不是用 *t, 因为*p 或者 *q 表示的就是一个具体变量的内容。无需在定义一个指针变量。 进行值交换
t = *p;
*p = *q;
*q = t;
}