C语言-指针重要内容

一、指针变量

  当我们需要使用指针存储一个变量的时候,我们需要使用取地址操作符(&)来获取它的地址,用指针来存储它的地址

int a=10;
int* pa=&a;

此处,a是我们要存的变量,为整型变量,pa则是储存a的地址的变量,为指针变量。

二、使用const修饰指针

(一):const修饰常变量:

const int a=10;

此时,变量a不可以被直接修改,也就是

a=20;

是行不通的,(但我们仍可以通过pa储存a的地址,再解引用修改a的内容)。

(二)const修饰指针变量

我们根据const和*的关系分为两种情况:

m=100;
n=10;
int *const p = &n;
const int* p = &n;

对于第二行代码,我们是限制了变量p不可以被修改,也就是指针变量被限制了,但我们可以通过指针变量来修改指针指向的内容

可以*p=0;

不可以p=&m;

对于第三行代码,我们限制了指针指向的内容,也就是我们不能通过指针去修改指针指向的内容,但我们可以修改指针变量本身存的地址

可以p=&m;

不可以*p=0;

三、指针的运算

   指针+/-整数

本质上是

    地址+/-(变量类型的大小)*整数

也就是

int arr[5]={1,2,3,4,5};
int *p=arr;

*p==1;

*(p+1)==2;

四、野指针

①指针未初始化,导致指针指向一个随机内容

②指针越界访问

③指针指向的空间被释放(常见于存函数返回值的地址,可是返回值对应的数因为是局部变量,所以早就被释放了)

五、二级指针

指针变量寸一个特定类型的地址,而可不可以有一种变量存储指针变量的地址呢?

答:可以有,二级指针变量。

int a=10;
int *pa=&a;
int **ppa=&pa;

解引用的时候:

*ppa找到的是指针变量pa的地址,值为变量a的地址,**ppa找到的是a的地址,值为a中寸的值。

六、指针数组

形如

int *arr[10];

表示的就是指针数组,本质上是存有10个int*类型数据的数组。

七、字符指针变量

就是所指向内容是字符的指针,存的是字符的地址,

有一个巧妙的应用:

int main()
{
 const char* pstr = "hello world";
 printf("%s\n", pstr);
 return 0;
}

此操作可以将字符串的首元素h存入pstr中,

打印出hello world是因为%s打印时会一直向后寻找'\0',恰好ptsr+2对应e,ptsr+3对应l......

八、数组指针变量

就是所指向内容是数组的指针,存的是数组首元素的地址,

形如

int arr[10]={0};
int (*p)[10]=&arr;

九、函数指针变量

就是指向函数的指针(函数名实际上就是函数的地址)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值