指针的引入:指针==地址;
int *p;//这里的*是一个标识符,告诉系统我是一个指针变量,是用来保存别人的地址的,和下方的运算符不同
p=&a;
printf("a的地址是:0x%p",&a);
printf("a=%d\n",*(&a));//取值运算符,他把后面跟的内存地址中的数据‘取出来’
指针变量==存放地址的变量
#include <stdio.h>
int main
{
int a=0x1234;
int *p=&a;
char *c=&a;
printf("p=%p\n",p);
printf("c=%p\n",c);
printf("a=%x\n",*p);//取值的时候出现了问题,取值运算符会根据指针变量类型,访问不同类型大小的空间
printf("a=%x\n",*c);
return 0;
}
为什么用指针,作用于地址,如下:封装一个函数,实现两个数的交换
#include <stdio.h>
void changeData(int *pdata,int *pdata2)
{
int tmp;
tmp=*pdata;
*pdata=*pdata2;
*pdata2=tmp;
}
int main()
{
int data=10;
int data2=20;
printf("交换之前:data=%d,data2=%d\n",data,data2);
changeData(&data,&data2);
printf("交换之后:data=%d,data2=%d\n",data,data2);
return 0;
}
定义一个指针变量指向数组:
int arr[3]={1,2,3,};
int *p;
p=&arr[0];//数组的首地址就是首个元素的地址
//p=arr;//数组名就是数组的首地址
指针的增量和数组的关系:
printf("%d",*(p+1));
指针偏移的时候要回到数组首地址