首页 > 其他分享 >C语言指针系列3——含野指针+assert

C语言指针系列3——含野指针+assert

时间:2024-09-27 22:55:19浏览次数:10  
标签:变量 指向 int 含野 assert 地址 表达式 指针

今天我们来继续感受指针的魅力~


野指针

首先我们来了解一下什么叫野指针~

1.定义

       野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。(来自百度)

也就是说当一个指针没有初始化或者没有给它一个指定的的变量,那么他就是野指针

2.用代码来演示一下

#include <stdio.h>
int main() {
	int* p;//这是野指针
	int arr[10] = { 0 };
	int* pa = arr[10];//这也是野指针
	printf("%d", *pa);//如果运行,程序会崩,不会出结果
	return 0;
}

3.区别于空指针

这里我们要与空指针做个区分,举个例子 int* p = NULL;  这就是空指针,它是不指向内存的,而野指针则是随机指向内存中的变量地址

以上就是我们第一个部分,接下来进行第二部分~

assret 断言

1.头文件

#include <assret.h>

如果不需要断言那么就在这个头文件之前加上一个定义  #define NDEBUG;

2.用法

assert();

这里括号里面是表达式,表达式为真就无事发生,表达式为假,就会报错,程序不会进行

3.为什么要用它嘞

因为这是特别有效的一种方法来帮你判断你的代码有没有问题,特别直观~


今天指针就说到这里啦,加油!

 预计今天会开始更新JAVA,但是C语言也是要继续更滴

标签:变量,指向,int,含野,assert,地址,表达式,指针
From: https://blog.csdn.net/2302_81032013/article/details/142579272

相关文章

  • 二级指针内存模型
    二级指针主要分成三种内存模型:1》指针数组:指针指向栈区的一段内存的首地址,并且栈区分配内存空间,每个元素又装有一个指针指向常量区的某一个地址类似于char*myArray[]={"aaaaa","cccccc","bbbbbb","11111"};应用场景名称:指针数组涉及到2个内存区:栈区和栈区 ......
  • C++ 智能指针详解: std::unique_ptr 和 std::shared_ptr
    C++11引入了智能指针,它们是管理动态分配内存的强大工具。本文将详细介绍两种最常用的智能指针:std::unique_ptr和std::shared_ptr。std::unique_ptr概述std::unique_ptr是一种独占所有权的智能指针。它确保一个对象只能被一个unique_ptr所拥有,这意味着不能复制unique_......
  • 指针基础知识
    指针基础知识一、资源链接59.形参和实参_值传递和地址传递_哔哩哔哩_bilibili(系列课程,包括同系列的其他视频)9.1.1取地址运算:&运算符取得变量的地址_高清720P_哔哩哔哩_bilibili(系列课程,包括同系列的其他视频)二、实参与形参在C/C++中,参数传递涉及到实参......
  • 【重生之我】初学C语言之 指针
    指针or地址???指针概念C语言中每个内存单元都有一个编号,有了这个内存单元的编号,CPU就可以快速找到一个内存空间,储存空间中一个字节里面能存放8个比特位。bitBYTEKBMBGBTB比特字节(8bit)1024字节1024KB1024MB1024GB内存单元的编号==地址==指针Cpu从内存单元中拿数据,Cpu算完后数据再储存在......
  • Python 迭代器双指针
    我们知道在cpp这种指针语言里面,双指针是这么写的:for(autoi=v.begin(),j=v.begin();j<v,end();j++){//dosomething...//updatepointeriwhile(cond){i++;}}对于py这样不带指针的,一般就只能这么写:i=0forjinrange(len(lst)):#do_something......
  • 基本双指针问题
    c++数据结构p2#include<iostream>#include<stdlib.h>#include<time.h>usingnamespacestd;//奇偶数调整问题//整型数组,把偶数调整到数组的左边,把奇数调整到数组的右边voidAdjustArray(intarr[],intsize){ int*p=arr; int*q=arr+size-1; //p->......
  • 虚函数,虚函数表,虚表指针,覆盖
    1、虚函数在成员函数前面加virtual后,该函数就称为虚函数,此时该类就会像虚继承一样多了一个虚表指针(虚函数表指针、虚指针)2、虚函数表虚表指针指向的是属于该类的一张表格的首地址,该表格中记录了该类的所有虚函数的首地址    如果类中没有其他成员变量    ......
  • 【C++习题】2.双指针_移动零
    文章目录题目链接:题目描述:解法(快排的思想:数组划分区间-数组分两块):C++算法代码:图解题目链接:283.移动零题目描述:解法(快排的思想:数组划分区间-数组分两块):双指针算法,利用数组下标充当指针。我们可以用一个cur指针来扫描整个数组,另一个dest指针用来记......
  • C++——输入三个整数,按照由小到大的顺序输出。用指针方法处理。
    没注释的源代码#include<iostream>usingnamespacestd;voidswap(int*m,int*n);intmain(){   inta,b,c;   int*p1,*p2,*p3;   cout<<"请输入三个整数:"<<endl;   cin>>a>>b>>c;   p1=&a;p2=&b;p3=&c;   ......
  • JavaScript中if嵌套 assert
    在JavaScript中,通常我们不会直接使用assert这个词,因为JavaScript标准库中并没有直接提供assert函数(尽管在一些测试框架如Jest、Mocha中经常看到)。但是,我们可以模拟一个assert函数的行为,即当某个条件不满足时抛出一个错误。结合if语句进行嵌套判断时,可以在每个需要断言的地方调用这......