网站后台优化,阿里巴巴网站服务内容,犀牛云做网站如何,成都学生做网站目录 一.什么是指针#xff1f;#xff1f;#xff1f; 指针是什么#xff1f; 指针变量#xff1a; 总结#xff1a; 总结#xff1a;
二.指针和指针类型
指针-整数#xff1a; 总结#xff1a;
指针的解引用
总结#xff1a;
三.野指针
如何规避野指针
往期…目录 一.什么是指针 指针是什么 指针变量 总结 总结
二.指针和指针类型
指针-整数 总结
指针的解引用
总结
三.野指针
如何规避野指针
往期回顾 一.什么是指针 指针是什么 指针理解的2个要点 1. 指针是内存中一个最小单元的编号也就是地址 2. 平时口语中说的指针通常指的是指针变量是用来存放内存地址的变量 总结指针就是地址口语中说的指针通常指的是指针变量。 指针变量 我们可以通过取地址操作符取出变量的内存其实地址把地址可以存放到一个变量中这个变量就是指针变量。 比如
#include stdio.h
int main()
{int a 10;//在内存中开辟一块空间int *p a;//这里我们对变量a取出它的地址可以使用操作符。//a变量占用4个字节的空间这里是将a的4个字节的第一个字节的地址存放在p变量
中p就是一个之指针变量。return 0;
}p就是一个指针变量而*p叫做指针变量的解引用指向p指针所指的对象 总结 经过仔细的计算和权衡我们发现一个字节给一个对应的地址是比较合适的。 对于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/1024MB2^32/1024/1024/1024GB 4GB4G的空闲进行编址。 这里我们就明白 在32位的机器上地址是32个0或者1组成二进制序列那地址就得用4个字节的空间来存储所以 一个指针变量的大小就应该是4个字节。 那如果在64位机器上如果有64个地址线那一个指针变量的大小是8个字节才能存放一个地 址。 总结 指针是用来存放地址的地址是唯一标示一块地址空间的。 指针的大小在32位平台是4个字节在64位平台是8个字节。
二.指针和指针类型 当有这样的代码
int num 10;
p num; 要将numnum的地址保存到p中我们知道p就是一个指针变量那它的类型是怎样的呢 我们给指针变量相应的类型。
char *pc NULL; int *pi NULL; short *ps NULL; long *pl NULL; float *pf NULL; double *pd NULL; 这里可以看到指针的定义方式是 type * 。 其实 char* 类型的指针是为了存放 char 类型变量的地址。 short* 类型的指针是为了存放 short 类型变量的地址。 int* 类型的指针是为了存放 int 类型变量的地址。 那指针类型的意义是什么 我们接着讨论
指针-整数 如下代码
#include stdio.h
//演示实例
int main()
{int n 10;char *pc (char*)n;int *pi n;printf(%p\n, n);printf(%p\n, pc);printf(%p\n, pc1);printf(%p\n, pi);printf(%p\n, pi1);return 0;
}根据运行结果我们发现当指针变量的类型是char型的时候指针1指针向后移动一位当是int型的时候指针1指针向后移动4位。 总结 指针的类型决定了指针向前或者向后走一步有多大距离。
指针的解引用
//演示实例
#include stdio.h
int main()
{int n 0x11223344;char *pc (char *)n;int *pi n;*pc 0; //重点在调试的过程中观察内存的变化。*pi 0; //重点在调试的过程中观察内存的变化。return 0;
} 通过调试中窗口-内存-找到n的地址接着进行调试
当代码运行到1399行的时候n的地址第一位变成00 当代码运行到1400行的时候n的地址前四位全变成00 总结 指针的类型决定了对指针解引用的时候有多大的权限能操作几个字节。简单来说指针变量体现了访问指针内存的一种视角想怎样访问内存应该找相应的指针变量。 比如 char* 的指针解引用就只能访问一个字节而 int* 的指针的解引用就能访问四个字节。
三.野指针 野指针成因
①指针未初始化
#include stdio.h
int main()
{ int *p;//局部变量指针未初始化默认为随机值*p 20;return 0;
}②指针越界访问
int main()
{int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p arr;int i 0;for (i 0; i 10; i){printf(%d, *p);//当i10的时候再运行出现越界访问p;}return 0;
} 如何规避野指针
1. 指针初始化
2. 小心指针越界
3. 指针指向空间释放即使置NULL空指针——专门用来初始化指针的
4. 避免返回局部变量的地址
5. 指针使用之前检查有效性
#include stdio.h
int main()
{int *p NULL;//....int a 10;p a;if(p ! NULL){*p 20;}return 0;
}往期回顾
C语言函数递归经典题型——汉诺塔问题-CSDN博客
C语言——数组基本知识二-CSDN博客
C语言——数组基本知识一-CSDN博客
C语言——数组逐元素操作练习-CSDN博客
C语言编程练习验证哥德巴赫猜想 进制转换 rand函数-CSDN博客
C语言——函数基本知识三-CSDN博客
C语言——函数基本知识二-CSDN博客
C语言 ——函数基本知识一-CSDN博客
C语言——二分法查找讲解-CSDN博客
C语言算法经典基础题型——求一个数的回文数两种方法_编程计算一个数的回数-CSDN博客