指针变量存储的不是变量,而是变量的地址。
指针是c的精髓
指针和指针变量
1.通过变量的地址可以找到该变量所在的存储空间,所以说该变量的地址指向该变量所在的存储空间,该地址是指向该变量的指针。
2.定义:变量类型* 变量名
3.初始化:
(1)接受变量的地址;
int a=10;
int* p;
p=&a;
(2)与其他指针变量指向同一块存储空间;
int *q;
q=p;
(3)定义时同时赋值。
int a=10;
int* p=&a;
&(取址运算符):取变量所在的地址
*(取值运算符):取出变量指向的地址中存储的数据
4.指针变量的引用
根据指针变量存放的地址,访问该地址对应的变量:*指针变量名
#include<stdio.h>
int main(){
int a=10;
int* p=&a;
printf("%d\n",*p);
return 0;
}
5.补充
(1)不确定指针在何时何处使用时,可以让它指向空
int* p=0;//0时唯一不必转换就可以赋值给指针的数据
int* q=null;//null是一个宏定义,其作用与0一样
(2)无类型指针:void* ;
void *p=NULL,*q;//定义两个无类型指针,其中一个指向null
int* m=(int*)p;
int a=10;
q=&a;
指针作为函数参数
因为实参和形参之间的数据传递是单向的值传递,所以使用指针变量作为函数的形参,通过传递地址的方式,使形参和实参都指向主调函数中数据所在地址,从而使被调函数可以对主调函数中的数据进行操作。
指针的交换
1.指针指向交换;
#include<stdio.h>
int main(){
int *temp=0;
int a=10,b=20;
int* p =&a;
int* q =&b;
temp=p;
p=q;
q=temp;
printf("%d\n",*p);
printf("%d",*q);
}
2.指针所指地址中存储数据的交换。
#include<stdio.h>
int main(){
int a=10,b=20;
int* p =&a;
int* q =&b;
int temp=0;
temp=*p;
*p=*q;
*q=temp;
printf("%d\n",*p);
printf("%d",*q);
}