指针易错点(超详细)

📌 博客主页   爆打维c

本文将介绍指针基本知识点及易错点,刚入门学习c语言的小伙伴们可以收藏起来,方便找到。

目录

一、指针是什么?

1.const修饰指针

总结:

2.野指针

野指针成因:

3.指针数组与数组指针的区别

3.1指针数组:

指针数组模拟⼆维数组:

3.2数组指针

以上就是今天要讲的内容,本文仅仅简单介绍了指针的易错点及某些用法,而利用指针访问地址对我们c语言的学习有很重要的意义,本系列持续更新中.....


一、指针是什么?

我们知道计算上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中。

而定义一个变量会占用内存,在计算机中我们把内存单元的编号也称为地址。C语⾔中给地址起了新的名字叫:指针。

我们可以通过操作指针变量的值从而改变指针指向的那个变量的值。

所以我们可以理解为:
• 内存单元的编号 == 地址 == 指针

二、指针用法

1.const修饰指针

int a=10;
int b=20;
int*const p=&a;
 p=&b;   //error
*p=30;   //a的值会被改变为30
int a=10;
int b=20;
int const*p=&a;
 p=&b;   //p指向变量b
*p=30;   //error 
const int*p与int const*p 等效

总结:

const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。 但是指针变量本⾝的内容可变。
const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指 向的内容,可以通过指针改变。

2.野指针

•  野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

野指针成因:

1. 指针未初始化
2. 指针越界访问
3. 指针指向的空间被释放
为防止野指针,对应的我们需要
1. 指针初始化
2. 注意 指针越界
3.  指针变量不再使⽤时,及时置NULL,指针使⽤之前检查有效性

3.指针数组与数组指针的区别

大家先看看下列例子哪个指针数组,哪个又是数组指针

int *p[10];

int (*p)[10];

教大家一种一眼就能看出来的方法:

指针变量先与什么结合就是什么 

例1 p先与[ ]结合,那么它就是一个数组,是用来存放整型指针变量的数组。

例2 p先与 * 结合,那么它就是一个指针,指向一个整形数组的指针。

3.1指针数组:

~指针数组的每个元素是地址,⼜可以指向⼀块区域。

指针数组模拟⼆维数组:

代码如下:

#include <stdio.h>
int main()
{
 int arr1[] = {1,2,3,4,5};
 int arr2[] = {2,3,4,5,6};
 int arr3[] = {3,4,5,6,7};
 //数组名是数组⾸元素的地址,类型是int*的,就可以存放在parr数组中
 int* parr[3] = {arr1, arr2, arr3};
 int i = 0;
 int j = 0;
 for(i=0; i<3; i++)
 {
 for(j=0; j<5; j++)
 {
 printf("%d ", parr[i][j]);
 }
 printf("\n");
}
return 0;
}

parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。
上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的。

3.2数组指针



以上就是今天要讲的内容,本文仅仅简单介绍了指针的易错点及某些用法,而利用指针访问地址对我们c语言的学习有很重要的意义,本系列持续更新中......

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值