上周完了一维、二维数组与指针,时间有点长现在回忆总结一下。
指针是指某个变量的地址值
这里仅对指针变量解释。
一、指针变量的解释
1.指针变量是存储指针的变量,即一个存储着某个变量地址值的变量。
2.我们在日常交流中说,如果指针变量存储了某个变量的地址,那么我们说指针变量指向了该变量,即该指针指向了某变量。
二、如何定义指针变量
★一定要注意定义时*p与进行运算时*p的区别
先对可能出现的符号进行罗列 它们分别是:
符号 | 解释 | 解释 |
a | 变量a | 目标值 |
&a | 变量a的地址 | 地址 |
p | 指针变量p | 地址 |
*p | 指针变量p指向的变量的值 | 值 |
定义与赋值
赋值方法有如下几种,了解并形成自己的赋值习惯。
1.定义指针变量时直接赋值
(此时*p仅为标识符,表达这是个指针变量,没有*p的意义 当然可以理解 int* float* double*的意思
int *p=&a; //在定义时直接进行赋值。
2.先定义再赋值
int*p; //定义一个指针变量名称为p
int a;
p=&a; //对指针变量p赋值为变量a的地址 即p指向变量a
3.指针变量之间赋值 (我本人记为同级指针间赋值)
int a;
int *p,*q;
p=&a;
q=p; //将p中变量a的地址赋给q,此时p、q中都保存&a,都指向a。
三、指针变量的引用
感觉初学者都会有这样的疑惑,指针用来干嘛,有啥用,我目前对此的理解时这样的:
1.首先计算机以二进制的方式存储变量信息,信息量太大。每个变量都有它的地址,通过地址来寻找这个变量会更准确,就像每个人都有自己的身份证一样,人可能会重名,但身份证不会(听说确实有重身份证的)
2.第二个原因也是最重要的最实际的。c语言按值传递的传递方式使得主函数的实参可以传值给自己定义函数的形参,而形参无法回来影响实参,只输入值不返回值函数就没有了意义。而通过在函数中对地址进行操作,通过地址间接访问就可以改变外部主函数变量的值,这样就使得自己定义的函数有了更多操作空间。
3.再者重要的原因是我在学习函数调用时,被调函数在启用时,会单独新创建内存空间,执行完函数体后内存释放,函数、形参都消失。也就是,形参是新创建出来的会消失的、相对主函数实参独立的参数,它有着自己独立的内存空间,且会马上消失。这也论证了形参实参完全独立互不影响。
举例swap函数
void swap(int a,int b)
int *p=&a;
int *q=&b;
int t;
t=*p;
*p=*q;
*q=t;