首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个关于指针的思考

最近在看代码时发现一个用于求结构体成员偏移量的方式 #define NBB_OFFSETOF(STRUCT, FIELD) (NBB_BUF_SIZE)((NBB_BYTE *)(&((STRUCT *...,总结出了以下场景: 1:对空指针进行赋值,即写操作,如int *p =NULL;*p=6; 2:对空指针进行引用,即读操作,如int *p = NULL;int a = *p; 对场景1,写验证代码如下...59 pop %ecx 804840d: 5d pop %ebp 804840e: 8d 61 fc lea -0x4(%ecx),%esp 8048411: c3 ret 得出的总结如下: 导致指针段错误的原因是对空指针地址进行了读或写操作...(printf一个指针其实也是对空指针进行了读操作,然后将内容写到显卡对应的内存)。...(NBB_BYTE *)(&((STRUCT *)0)->FIELD并没有对0地址进行读或写操作,该表达式中的0更应该看做是一个虚拟地址,代表了结构体的首地址,这样可以方便地计算出结构体成员的偏移量,因此

43020
您找到你想要的搜索结果了吗?
是的
没有找到

指针,野指针,万能指针

指针 int * p=NULL; 指针指向地址编号为0的地址,不可以访问指针指向的内容,因为内存地址编号0~255之间被系统占用,不可以访问 但是可以printf("%d",p);,输出p指向的地址...野指针 int *p=0xffff; 指针变量指向非法的内存空间,或指针变量为初始化也属于野指针 万能指针 void 无类型指针称为万能指针* 万能体现在:void*可以保存任意数据类型指针的地址...#include void test() { //万能指针 void* p = NULL; int num = 10; p = # //void *不可以直接解引用,...* p2 = NULL; char* p3= NULL; //char类型指针赋值给int类型指针要进行强制类型转换,否则会报错 p2 =(int*)p3; //void*不用强转,也不会发出警告...//因为void*可以保存任意数据类型指针的地址 p1 = p3; } int main() { return 0; }

1.4K10

CCPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 指针

指针和野指针指针:定义了一个指针变量,如果没有进行初始化,系统就会有可能随机赋值一个地址给这个指针变量,也就是说,这个指向指向一个未知的区域。...指针指针不是指向常数0,只指向地址0,即NULL,其实换句话说,指针的本质就是地址嘛,指针就是指针本身的值(地址)为0指针的作用是防止野指针的出现,因为我们不能知道野指针到底指向哪里,所以我们也无法判断一个指针是否是野指针...,这样很危险,但如果养成将指针初始化为指针的习惯,我们就能判断出这个指针是不是有效的(判断是不是NULL就可以了)通用指针一般都用在函数传参,实现所谓的“多态”,但到函数里面使用时,一般还是被转换成具体类型的指针...也就是一个指针的大小 区别 这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。...p是一个指针a是一个二维数组,需要用数组指针接收。 详细分析: int *p: p的类型是int*一级指针,大小4个字节,p存放的是一个整形地址。

1.7K30

指针的传说

指针,号称天下最强刺客。 他原本不叫这个名字,指针原本复姓异常,指针只不过是他的武器,但他杀戮过多,渐渐地人们只记住了指针这三个字。...听说指针出生的时候,脖子上就挂着一根针,整个 Java 大陆雪下一月不停,Linux 森林多块陆地直接沉陷,于是他的父亲 RuntimeException 就给他起了指针这个名字。...就在我受不了想说话的时候,Object突然说了一句:“带他去见指针吧。” “是,陛下!”突然,一个身穿红袍的枯瘦老者出现在我背后,把我吓了一跳。...没多久,他把我带到一个房间门口,也是面无表情的说道:“进去吧,指针就在里面。” 我挺住脚步,转过身问他:“你是谁?我们是不是见过?”...刚进房间,我就看见一个一身白衣的身影背对着我,笔直的身影好像要冲破天际,身上的气势强大无比,至少在我见过的所有人里足以排进前三了。指针,果然名不虚传!

72610

指针的传说

指针,号称天下最强刺客。 他原本不叫这个名字,指针原本复姓异常,指针只不过是他的武器,但他杀戮过多,渐渐地人们只记住了指针这三个字。...听说指针出生的时候,脖子上就挂着一根针,整个 Java 大陆雪下一月不停,Linux 森林多块陆地直接沉陷,于是他的父亲 RuntimeException 就给他起了指针这个名字。...就在我受不了想说话的时候,Object突然说了一句:“带他去见指针吧。” “是,陛下!”突然,一个身穿红袍的枯瘦老者出现在我背后,把我吓了一跳。...没多久,他把我带到一个房间门口,也是面无表情的说道:“进去吧,指针就在里面。” 我挺住脚步,转过身问他:“你是谁?我们是不是见过?”...刚进房间,我就看见一个一身白衣的身影背对着我,笔直的身影好像要冲破天际,身上的气势强大无比,至少在我见过的所有人里足以排进前三了。指针,果然名不虚传!

66220

CCPP 指针变量 | 数组指针 | 指针数组 | 野指针 | 指针

指针和野指针指针:定义了一个指针变量,如果没有进行初始化,系统就会有可能随机赋值一个地址给这个指针变量,也就是说,这个指向指向一个未知的区域。...指针指针不是指向常数0,只指向地址0,即NULL,其实换句话说,指针的本质就是地址嘛,指针就是指针本身的值(地址)为0指针的作用是防止野指针的出现,因为我们不能知道野指针到底指向哪里,所以我们也无法判断一个指针是否是野指针...,这样很危险,但如果养成将指针初始化为指针的习惯,我们就能判断出这个指针是不是有效的(判断是不是NULL就可以了)通用指针一般都用在函数传参,实现所谓的“多态”,但到函数里面使用时,一般还是被转换成具体类型的指针...指针数组 定义 int *p[n]; []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。...那现在我们清楚p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针

1.6K20

java指针报错_指针异常是什么意思

Java 中任何对象都有可能为,当我们调用对象的方法时就会抛出 NullPointerException 指针异常,这是一种非常常见的错误类型。...编程规范 通过遵守某些编程规范,也可以从一定程度上减少指针异常的发生。...,不要返回 null 值,而是返回一个的集合;如果返回值类型是对象,则可以选择抛出异常。...结合 @Nullable 和 @Nonnull 等注解,我们就可以在程序运行之前发现可能抛出指针异常的代码。 但是,值检测注解还没有得到标准化。...这种方式的优点是可以明确定义该方法是有可能返回空值的,因此调用方必须做好相应处理,这样也就不会引发指针异常。

2.1K30

内存溢出、内存泄露、野指针指针

彻底理清内存溢出,内存泄露,野指针指针 内存溢出 看到下面代码的情况,如果使用while循环一直调用GetMemory,一直malloc内存,但是没有使用free函数释放内存,会导致最后没有空间分配...endl; delete []data; } }; int main() { Object* a = new Object(10, 'A');//Object*指针指向一个...Object对象; void* b = new Object(20, 'B');//void*指针指向一个Object对象; delete a;//执行delete,编译器自动调用析构函数...野指针指针指针的情况 指针没有初始化为某个对象或者nullptr或者NULL 指针被delete后没有置,也就是设置NULL或者nullptr char *p = (char *)malloc...” 指针一般就是指针没有初始化为某个对象,导致使用的时候异常,或者类似野指针中的3情况,指针被回收了,其实对象是

76020

对象实例化指针处理

1 问题 如何解决对象实例化指针异常?...2 方法 首先创建一个package包,将其Menu类及相关代码放入其中,并在该package包下创建另一个类MenuItem,然后通过构造函数,写入需要运行的对象信息,最后在Menu类中用new***...: package menuItem;public class Menu { public static void main(String[] args) { //对象实例化指针异常...String content; //构造函数 MenuItem() { System.out.println("查看所有学生"); }} 3 结语 针对对象实例化指针异常问题...,提出创建package包、构造函数、对象实例化格式new***()方法,通过对象实例化指针处理实验,证明该方法是有效的,本文的方法在构造的函数中没有相关参数,因而能解决的问题受到局限,编程效率不高,

11330

Java如何有效避免指针

今天的话题是:《Java如何有效的避免指针》。...其实在阿里巴巴的《Java开发手册》里边,指针,也就是NullPointerException 简称NPE的,怕一下子写出NPE,部分的伙伴看不懂,索性就改成了指针。...下文的指针异常,我们用NPE表示。在实际的开发中,我们最讨厌的就是遇到指针了,业务跑着跑着发现了指针。...除了用java8的新特性Option外,shigen也写了一个工具类,实现了指针的控制问题。那就先来看看代码吧。...这样,我们在使用的时候就会很好的避免到指针的问题。当然,我们的方法也可以稍微改造一下,直接把字段值为的字段设置成默认值或者其它值,这个都是可以进一步的优化的。还是那句话:具体问题具体分析。

16620

如何优雅的解决指针

一、介绍 在实际的系统运行过程中,难免会出现报NullPointerException指针的错误,造成这样的本质原因就是数据或者对象为,导致程序进一步执行的时候报错!...一般的常规解决办法也就是加一个if判断。 if(obj !...针对这种情况,我们可以引入了对象模式以此来使我们的代码变的更优雅一点。 废话也不多说了,代码直接撸起来! 二、程序示例 下面,我们以获取从一个书籍库中获取书籍为例,实现过程如下!...return false; } @Override public String getName() { return bookName; } } 接着,创建一个对象...四、总结 在写代码的时候我们经常会遇到指针,为了避免指针的发生需要做一些判断。如果是复杂对象的话,还需要一层层地去判断。

98120
领券