栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言指针类型的意义

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言指针类型的意义

▶️文章目录

✅1.指针的概念

✅2.指针和指针类型

✅3.野指针

✅3.1野指针成因

✅3.2如何规避野指针


1.指针的概念

指针就是地址,口语中说的指针通常指的是指针变量

指针理解的2个要点:

1. 指针是内存中一个最小单元的编号,也就是地址

2. 平时口语中说的指针,通常指的是指指针变量

我们可以通过&(取地址操作符)取出变量的内存其实地址,把地址可以存放到一个变量中

这个变量就是指针变量,是用来存放内存地址的变量

#include 
int main()
{ 
    int a=10;//在内存中开辟一块空间 
    int*p=&a;//这里我们对变量a,取出它的地址,可以使用&操作符。   
             //a变量占用4个字节的空间,这里是将a的4个字节的第一个字节的地址存放在p变量中,p就是一个指针变量。 
    return 0;
}

指针变量的大小:

对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的时候产生高电平(高电压)和低电平(低电压)就是(1或者0);那么32根地址线产生的地址就会是:

00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000001

...

11111111 11111111 11111111 11111111

这里就有2的32次方个地址。

每个地址标识一个字节,那我们就可以给(2^32Byte == 2^32/1024KB == 2^32/1024/1024MB==2^32/1024/1024/1024GB == 4GB)4G的空闲进行编址

总结:

指针是用来存放地址的,地址是唯一标示一块地址空间的

指针的大小在32位平台是4个字节,在64位平台是8个字节

指针的大小是4或8字节,但是通过指针找到的数据的大小是由指针类型决定的

2.指针和指针类型

指针类型的第一个意义:

指针类型决定了指针在被解引用的时候访问几个字节

int*指针,解引用访问4个字节

char*指针,解引用访问1个字节

可以推广到其它类型

int*指针解引用的访问情况:

如果是int*指针,解引用访问4个字节

char*指针解引用的访问情况:

 如果是char*指针,解引用访问1个字节

指针类型的第二个意义:

指针的类型决定了指针向前或者向后走一步有多大(距离)

#define _CRT_SECURE_NO_WARNINGS
#include
int main()
{
	int a = 0x11223344;
	int* pa = &a;
	char* pc = (char*)&a;
	
	printf("%dn", pa);
	printf("%dn", pa+1);
	printf("%dn", pc);
	printf("%dn", pc+1);

	return 0;
}



int*指针+1向后走4个字节

char*指针+1向后走1个字节

3.野指针

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

3.1野指针成因

1. 指针未初始化

#include 
int main()
{  
    int*p;//局部变量指针未初始化,默认为随机值    
    *p=20; 
    return 0;
}

2. 指针越界访问

#include 
int main()
{    
	int arr[10] = {0};  
	int*p=arr;   
	int i=0;   
	for(i=0; i<=11; i++) 
	{      
		//当指针指向的范围超出数组arr的范围时,p就是野指针  
		*(p++) =i;  
	}   
	return 0;
}
3.2如何规避野指针

1. 指针初始化

2. 小心指针越界

3. 指针指向空间释放即使置NULL,0地址是无法访问的

4. 避免返回局部变量的地址

5. 指针使用之前检查有效性

祝大家520快乐!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923953.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号