一、指针
1、指针就是存放地址的变量。一个指针变量占用4个字节。
int* pa;//int * pa;
2、指针类型、取地址、解引用
(1)指针类型
int* pa;//pa,*pa
int *pa;
int * pa;
语义:pa是一个指针,该指针指向一个int型的数据,即pa存放一个int型数据的地址。
int* pa,pb;//pa是int*,pb是int
int *pa,*pb
(2)取地址——&
int a=5;
int* pa=&a;//pa指向a,a是pa的目标,pa是a的指针,pa存放着a的地址。*pa
(3)解引用(取目标)——*
*pa=100;//将100赋值给pa的目标,即赋值给a,pa=100;
3、指针的用法//int add(int* p);
(1)将指针作为函数的参数,传递变量的地址,进而在多个函数中访问相同的内存数据。
(2)指针也可以作为函数的返回值,但是不要返回指向局部变量的指针。因为函数返回以后,其局部变量所占用的内存将随函数栈一起被释放,所得到的指针为野指针。
int add()
{
int* p;
…
return p;
}
4、常量、常量指针和指针常量
(1)const可以修饰普通变量,该变量就会被当做常量来处理,即其值一经过初始化就不能再被修改。
(2)常量指针:指向常量的指针,即无法通过该指针修改其目标。
const int* p;
int const* p;
(3)指针常量:指针型的常量,即无法修改其值的指针。
int* const p;
const int* const p;//常量指针常量,p本身不能修改,其目标亦不能修改。
//const的用法
//游戏、不想被其他人修改自己的代码,要用const
#include <stdio.h>
int main()
{
const int a=100;
//a=200;//a属于常量,不能修改
int b=1000,c=20;
const int* p=&b;//常量指针
//*p=1;//不能通过其目标去修改
p=&c;
printf("%d\n",p);
int* const p1=&b;//指针常量
//p1=&c;//不能通过其地址去修改
*p1=100000;
printf("%d\n",*p1);
const int* const p2=&b;//常量指针常量
//*p2=300;//不能通过其目标去修改
//p2=&c;//不能通过其地址去修改
return 0;
}