C语言空指针可以赋值吗(c语言空指针void*赋值struct,结构强制转换问题)

2024-07-15 21:50:06 :28

c语言空指针可以赋值吗(c语言空指针void*赋值struct,结构强制转换问题)

各位老铁们好,相信很多人对c语言空指针可以赋值吗都不是特别的了解,因此呢,今天就来为大家分享下关于c语言空指针可以赋值吗以及c语言空指针void*赋值struct,结构强制转换问题的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录

c语言空指针void*赋值struct,结构强制转换问题

所谓空指针类型,就是说这个指针是无数据类型的指针,空指针data,它起的作用就是存放的是某个内存单元(也就是内存中某个字节,因为内存一般是按字节来编址的)的地址,由于空指针data没有初始化,那么它的指向是不确定的(即它存放的地址值是个未知数,我们不知道是谁的地址,这样的指针我们称为野指针),你把这个不确定的地址强制转化后赋值给结构体指针变量temp,赋值语句本身没有什么语法错误,你把这个地址打印出来也是没有什么问题的,但是如果你对这个地址的内存单元进行赋值操作,修改了这个内存单元的内容,那么可能会造成严重的后果。比如说这个地址所属的内存单元是操作系统的,你修改它的值,就有可能造成死机的后果。

C语言怎么赋空值

C语言并没有空值这个概念,一般习惯上,指针若是指向地址0便是空值,其他数据若内容是0便是空值。填充一大片内存区域可以使用memset函数,它的填充长度是按字节计。整形:int a = 0;字符型:char a = 0;数组:int a;memset( a, 0, sizeof(int)*20 );C字符串只需要把第一个字符设为’\0’即可。当然也可以全部清成0。char a = "ashdfuih";memset( a, 0, sizeof(char)*20 );例如有一个结构体Some x,可以这样清零:memset( &x, 0, sizeof(Some) );如果是一个结构体的数组Some x,可以这样:menset( x, 0, sizeof(Some)*10 );任何一个指针都可以通过直接赋为0变成空指针:Some* p = 0;

能给空指针赋值吗C/C++

p=0 和 p=null是一样的,都是让指针p指向0地址处。你的意思应该是 *p = 0会怎么样吧,这样写编译能过,但绝大多数情况下,运行时会挂掉。因为0地址是不允许写的

c语言二级指针初始化为空后赋值问题

对指针的理解不够深刻,首先指针也是一个变量。二级指针保存着是一级指针地址的变量,所以int **ppdata = NULL说明了 这个二级指针保存的是一个一级指针的地址,保存的地址是0;由于保护模式的缘故,(可自行查阅资料),ring3无法对保护段的内存进行读写,所以会出现运行时崩溃。而第一个没报错的原因是因为一级指针虽然初始化保存了0的地址,但是代码在之后的操对一级指针进行重新赋值让其指向了别的内存段。所以没报错。

C语言用来CHAR还有NULL

15.C解析:A B 空指针不可以赋值。会出错。D 指针未赋值。 野指针不可以使用。16.A解析:如果null是小写的话,那么这道题选B,C中大小写有区分,大写的NULL实际上就是系统定义的一个符号常量,它的值为0,也就是如果是printf("%d\n",NULL);那么输出为0,选A

OK,关于c语言空指针可以赋值吗和c语言空指针void*赋值struct,结构强制转换问题的内容到此结束了,希望对大家有所帮助。

c语言空指针可以赋值吗(c语言空指针void*赋值struct,结构强制转换问题)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.