既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
int a = 10;
int* pa = &a; //指针变量的初始化
指针常见错误
引用未初始化的指针变量
试图引用未初始化的指针变量是初学者最容易犯的错误。未初始化的指针变量就是“野”指针,它指向的是无效的地址。
有些书上说:“如果指针变量不初始化,那么它可能指向内存中的任何一个存储单元,这样就会很危险。如果正好指向存储着重要数据的内存单元,而且又不小心向这个内存单元中写入了数据,把原来的重要数据给覆盖了,这样就会导致系统崩溃。”这种说法是不正确的!如果真是这样的话就是编译器的一个严重的 BUG!
2.2:指针越界访问
#include<stdio.h>
int main(void)
{
int arr[10] = { 0 };
int i = 0;
int* p = arr; //接收arr数组首元素的地址
for (i = 0; i <= 12; i++)//当i=10的时候已经是非法访问内存了,因为,我数组名的常量表达式内容只有10个元素。
{
*p = i; //i每次循环赋值给指针p
p++; //指针自增+1,代指arr元素+1
//*p++ = i 也是可以,这里虽说++优先级更高,但是它是后置运算符
}
return 0;
}
指针变量越界数组导致野指针问题!
3.3:指针指向的空间如果我们还回去的话,就把指针指针置为NULL
**NULL——**空指针,用来初始化指针或者给指针赋值,可以转到定义看看 #define NULL ((void *)0)
说的简单一点就是:当你指针不知道怎么赋值,就赋值给一个空指针 NULL
Null是在计算中具有保留的值,用于指示指针不引用有效对象。程序通常使用空指针来表示条件,例如未知长度列表的结尾或未执行某些操作; 这种空指针的使用可以与可空类型和选项类型中的Nothing值进行比较。
空指针不应与未初始化的指针混淆:保证空指针与指向有效对象的任何指针进行比较。但是,根据语言和实现,未初始化的指针可能没有任何此类保证。它可能与其他有效指针相等; 或者它可能比较等于空指针。它可能在不同的时间做两件事。
int a = 10;
int* pa = &a;
printf("%d\n", *pa);
*pa = 20; //此时当我们不想用它时候
pa = NULL; //就把pa指针置成NULL
printf("%d\n",pa);
4.4:指针使用之前检查有效性
当你指针变量不可以用的时候就把它设置成NULL,当你指针变量可以用的时候就不是NULL。
就是当我们对这个指针进行初始化的话,那么它就是有效的,如果没有初始化那么就是无效的。
if (pa != NULL)
{
//进行使用
}
if (pa == NULL)
{
//不进行使用
![img](https://img-blog.csdnimg.cn/img_convert/477c82a17c9eb1b7482e6ce5ebf3850c.png)
![img](https://img-blog.csdnimg.cn/img_convert/ed63a96d1d0c3f083bf18d317d48b9ec.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**