指针的概念
指针也就是地址,操作系统的寻址空间编号,就是给操作系统每个单元都分配了统一编号。
对应的指针类型变量,只能存放对应类型的变量地址。
指针中最重要的就是*和&,*就代表定义的是一个指针,而&则是用来取地址
定义一个指针
int *p; //定义了整形的指针变量
int a=100; //定义了变量a
p=&a; //把a的地址付给了p
指针分类
字符指针,短整型指针,整形指针,长整型指针,float型指针,double型指针,函数指针,结构体指针,指针的指针,数组指针。
指针和变量之间的关系
利用指针来交换两个变量的地址和值
#include <stdio.h>
void ch(int *a,int *b);
int main(){
//交换两个变量的值
int *p;
int a=18 , b=32; //定义变量a,b
int *p_a=&a; //a地址赋给p_01
int *p_b=&b; //b地址赋给p_02
printf("a的初始值%d\n",a); //输出a的数值
printf("b的初始值%d\n",b); //输出的b数值
printf("a的地址%d\n",p_a); //a的地址
printf("%b的地址%d\n",p_b); //b的地址
p=p_a;
p_a=p_b; //交换a b地址
p_b=p;
printf("交换后a的地址%d\n",p_a);
printf("交换后b的地址%d\n",p_b);
ch(&a,&b); //调用函数
printf("交换后a的值=%d\n",a); //输出交换后的 a
printf("交换后b的值=%d\n",b); //输出交换后的 b
return 0;
}
void ch(int *a,int *b){
int c;
c=*a;
*a=*b;
*b=c;
// printf("a的值%d\n",*a);
// printf("b的值%d\n",*b);
}
指针与元素之间的关系
#include <Stdio.h>
int main(){
int a[10]={1,23,5,2,5,7,2,5,3,9};//开辟空间
int b[5]={0,1,2,3,6};
int c[4]={12,23,54,76};
int *p;
int i;
// printf("a[0]的地址%p\n",&a[0]);
// p=&a[0]; //取0号元素的地址,初始化
// printf("指针变量p的值%p\n",p);
p=a;//用数组名初始化
// printf("指针变量p的值%p\n",p);
for(i=0;i<10;i++){
printf("指针变量p的值%p\n",p); //可以用三种方式来确定数组中第一个元素的地址
printf("指针变量p%d所对应内容%d\n",i+1,*p);
p++;
}
printf("\n");
p=b;
for(i=0;i<5;i++){
*p+=10;
printf("指针变量p的值%p\n",p);
printf("%d\n",*p);
p++;
}
p=c;
return 0;
}
哦,对了,还有个小知识:
*p(x++)和*px++的区别
*p(x++)是先x++后再取(x+1)的内容;
*px++是先取x的内容再进行x+1