指针变量
/*
指针变量:用来保存地址的变量
地址的获取 &
指针定义: 类型 指针名 值
*星号的作用:取指针变量所指内存变量的值(*pa 取pa所指的值)
*/
#include <stdio.h>
int main(void)
{
int a=1234;
int *pa=&a; //定义一个指向整型的指针变量,&a获取整型变量a的值
int *pb=(int*)0x12345678;
int i=0x12345678; //检测当前系统是小端还是大端
char *pc=(char*)&i;
//访问指针指向的内存的值(*p)
printf("%x\n",*pc);
return 0;
}
/*
使用指针实现数据交换
*/
#include <stdio.h>
void swap(int*,int*);
int main(void)
{
int a,b;
printf("请输入两个数:\n");
scanf("%d %d",&a,&b);
int *pa=&a;
int *pb=&b;
swap(pa,pb);
printf("交换后的结果为:%d %d\n",a,b);
return 0;
}
void swap(int *pa,int *pb)
{
int temp;
temp=*pa;
*pa=*pb;
*pb=temp;
}
指针的指针
/*
定义完指针变量后,可以给pa赋一个地址,但不能直接使用*pa;
当pa保存了一个有效的且合法的地址时,才可以使用*pa;
*/
#include <stdio.h>
int main (void)
{
int *pa=NULL;//指针在没有赋予初值时,一般用NULL初始化
// *pa=12; //不能访问内存单元,可以访问地址单元
int a=4;
*&a; //首先对a取地址,然后访问改地址中存储的值
//&*a; //错误,不能对a取值
pa=&a; //*pa=a; pa=&a;
*&pa;//首先对pa取地址,然后访问改地址中存储的值,整个表达式的结果时a的地址
&*pa;//首先取pa所指的单元a,之后取a的地址,表达式结果时a的地址
//指针的指针,指向指针变量的指针变量
int **ppa=&pa;
//**ppa=*pa=a;
printf("&ppa=%p\n",&ppa);
printf("ppa=%p &pa=%p\n",ppa,&pa); //ppa=&pa
printf("*ppa=%p pa=%p &a=%p\n",*ppa,pa,&a); //*ppa=pa=&a;
printf("**ppa=%d