1.初步理解指针
C语言的指针指的是一个地址,也是内存单元的编号,它存储的是内存地址.
#include <stdio.h>
int main(){
//初始化一个变量a的值
int a=10;
//定义一个指针p指向变量a的地址,int*表示这个变量存放的是int类型的地址
int* p=&a;
//打印这个指针所指向的变量的值
printf("%d",*p);
return 0;
}
如何理解指针指向一个变量?
如果一个指针保存了一个普通变量的地址,我们就说这个指针指向了这个变量,
如上述代码中:
int a=10;
int* p=&a;
此时*
p=a;这句话的理解是*p完全等同于a
*
p最准确的解释是:*
p表示的是以p的内容为地址的变量
指针和指针变量的关系
指针表示的是一个常量,它就是一个地址.
指针变量就是一个变量,它就是一个保存地址的变量.
我们通常所说的指针就是指针变量.
附: *
代表什么含义?
*
有三层含义:
1.表示乘法
2.声明指针,表示这是一个指针变量,如上述代码中提到的int* p=&a;
3.指针运算符,如前面指针p已声明,则*
p就表示为以p的内容为地址的变量.
指针的作用:
1.快速地传递数据,减少内存的耗用.
2.直接访问硬件.
3.使函数返回一个以上的值.这一点,将在下列代码中有所体现.
#include <stdio.h>
void change(int* pA,int* pB){
//修改pA,pB所指向的变量(即A和B)的值为15
*pA=15;
*pB=15;
}
int main(){
int a=10;
int b=20;
int* pA=&a;
int* pB=&b;
//传入pA,pB指针
change(pA,pB);
//输出a和b的值
printf("a=%d,b=%d",a,b);
return 0;
}
通过以上代码我们也知道了如何通过被调函数修改主函数普通变量的值:
1.实参填入普通变量的地址.
2.形参必须为指针变量.
3.在被调函数中通过
*
指针=... 来修改主函数中普通变量的值