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

将值赋给C中的非空void*指针的正确方法应该是什么?

将值赋给C中的非空void*指针的正确方法是通过类型转换将值赋给指针。

在C语言中,void指针是一种通用指针类型,可以指向任意类型的数据。由于void指针没有具体的类型信息,因此在给其赋值时需要进行类型转换。

正确的方法是使用类型转换将值赋给void指针,确保类型匹配。例如,如果要将一个整数值赋给非空void指针ptr,可以使用以下代码:

代码语言:c
复制
int value = 10;
void* ptr = (void*)&value;

在这个例子中,我们使用了类型转换(void*)将整数值的地址赋给了void*指针ptr。这样,ptr就指向了value的地址,可以通过ptr来访问该整数值。

需要注意的是,赋值给void*指针时需要确保指针非空,否则会导致未定义的行为。在实际应用中,可以通过判断指针是否为NULL来确保指针非空。

对于这个问题,腾讯云提供了一系列云计算相关产品,如云服务器、云数据库、云存储等,可以满足不同场景下的需求。具体产品介绍和相关链接可以参考腾讯云官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言指针初始化和赋值

字符串常量传递是它首地址,不可以通过*cp修改该字符串,因为该字符串为常量,而它只是简单指针指向该字符串常量 3、指针常量 在C语言中没有一种内建(built-in)方法去表示指针常量,...所以后面所示做法是不行: int *p = 0x12345678 ; 正确方式应为:int *p = (int *) 0x12345678; 要注意指针只能存放地址,不能将一个0整型常量表达式或者其他地址类型数据一个指针...:一个具有0整形常量表达式,或者此类表达式被强制转换为void *类型,则称为指针常量,它可以用来初始化或任何类型指针。...也就是说,我们可以0、0L、’/0’、2–2、0*5以及(void *)0一个任何类型指针,此后这个指针就成为一个指针,由系统保证指针不指向任何对象或函数。...C语言中malloc函数返回就是一个void *型指针,我们可以把它直接一个其他类型指针,但从安全编程风格角度以及兼容性上讲,最好还是返回指针强制转换为所需类型,另外,malloc在无法满足请求时会通过返回一个指针来作为

2.3K10

【编程基础】C语言指针初始化和赋值

字符串常量传递是它首地址,不可以通过*cp修改该字符串,因为该字符串为常量,而它只是简单指针指向该字符串常量 3、指针常量 在C语言中没有一种内建(built-in)方法去表示指针常量,...所以后面所示做法是不行: int *p = 0x12345678 ; 正确方式应为:int *p = (int *) 0x12345678; 要注意指针只能存放地址,不能将一个0整型常量表达式或者其他地址类型数据一个指针...:一个具有0整形常量表达式,或者此类表达式被强制转换为void *类型,则称为指针常量,它可以用来初始化或任何类型指针。...也就是说,我们可以0、0L、'/0'、2–2、0*5以及(void *)0一个任何类型指针,此后这个指针就成为一个指针,由系统保证指针不指向任何对象或函数。...C语言中malloc函数返回就是一个void *型指针,我们可以把它直接一个其他类型指针,但从安全编程风格角度以及兼容性上讲,最好还是返回指针强制转换为所需类型,另外,malloc在无法满足请求时会通过返回一个指针来作为

2.6K80

C进阶】——动态内存管理详解 及 经典笔试题解析

我们看到上面代码我们扩容后返回指针指针变量ptr ,那为什么不直接给p呢? 因为,realloc开辟空间也有可能会失败,它失败同样返回空指针。...所以我们先ptr ,然后判断一下,不为,再p,让p继续管理扩容后空间。 然后,不使用ptr ,最好将其也置。 然后,没什么问题,我们就可以使用扩容后空间了。...我们把malloc返回了p,让p指向了这100个字节空间首地址,但是str是不是并没有改变啊,Test 函数 str 一直都是 NULL。...*)malloc(100); } void Test(void) { char* str = NULL; GetMemory(&str);//不传地址,p作为返回str也可以 strcpy...",p是数组名,是首字符’h’地址,p作为返回str,那我们是不是就可以通过str访问数组p了,printf(str)就把"hello world"打印出来了。

12510

const特性总结(不断更新)

*cptr对象不可以改变。    e.g:  *cptr = 43;//ERROR! ii、不能将const对象地址指向const对象指针。反之可以,下面在谈。    ...iiii、可以指向const对象指针所指向const对象       e.g:下面这个程序 1 char *strcpya(char *strDest, const char *strScr...如果采用“指针传递”方式函数返回加const修饰,那么函数返回(即指针内容不能被修改,该返回只能被加const 修饰同类型指针。...,如const变量赋值,具体可见思考题; 3 )在参数中使用const应该使用引用或指针,而不是一般对象实例,原因同上; 4 )const在成员函数三种用法(参数、返回、函数)...要很好使用; 5 )不要轻易函数返回类型定为const; 6) 除了重载操作符外一般不要将返回类型定为对某个对象const引用; [思考题答案] 1 这种方法正确

71080

Java中有关Null9问题

在这份材料中,我们学习到Javanull关键字基本细节,并且探索一些技术来尽可能减少null检查以及如何避免恶心指针异常。...就像你在这里看到这样,我myObj定义为静态引用,所以我可以在主方法里直接使用它。注意主方法是静态方法,不可使用静态变量。...但是如果null赋值包装类object,然后object各自基本类型,编译器不会报,但是你将会在运行时期遇到指针异常。这是Java自动拆箱导致,我们将在下一个要点看到它。...它将会抛出指针异常,但是你可能不知道,你可以使用静态方法来使用一个为null引用类型变量。因为静态方法使用静态绑定,不会抛出指针异常。...从编译角度来看这是可以,但结果完全取决于方法。Null安全方法,如在这个例子print方法,不会抛出指针异常,只是优雅退出。如果业务逻辑允许的话,推荐使用null安全方法

1.1K50

Java中有关Null9件事

在这份材料中,我们学习到Javanull关键字基本细节,并且探索一些技术来尽可能减少null检查以及如何避免恶心指针异常。...就像你在这里看到这样,我myObj定义为静态引用,所以我可以在主方法里直接使用它。注意主方法是静态方法,不可使用静态变量。...但是如果null赋值包装类object,然后object各自基本类型,编译器不会报,但是你将会在运行时期遇到指针异常。这是Java自动拆箱导致,我们将在下一个要点看到它。...它将会抛出指针异常,但是你可能不知道,你可以使用静态方法来使用一个为null引用类型变量。因为静态方法使用静态绑定,不会抛出指针异常。...从编译角度来看这是可以,但结果完全取决于方法。Null安全方法,如在这个例子print方法,不会抛出指针异常,只是优雅退出。如果业务逻辑允许的话,推荐使用null安全方法

65220

Java中有关Null9件事

在这份材料中,我们学习到Javanull关键字基本细节,并且探索一些技术来尽可 能减少null检查以及如何避免恶心指针异常。...就像你在这里看到这样,我myObj定义为静态引用,所以我可以在主方法里直接使用它。注意主方法是静态方法,不可使用静态变量。...但是如果null赋值包装类object,然后object各 自基本类型,编译器不会报,但是你将会在运行时期遇到指针异常。这是Java自动拆箱导致,我们将在下一个要点看到它。...它将会抛出指针异常,但是你可能不知道,你可以使用静态方法来使用一个为null引用类型变量。因为静态方法使用静态绑定,不会抛出指针异常。...从编译角度来看这是可以,但结果完全取决于方法。Null安全方法,如在这个例子print方法, 不会抛出指针异常,只是优雅退出。如果业务逻辑允许的话,推荐使用null安全方法

54920

【数据结构】深入浅出理解链表中二级指针应用

pbpa.并在过程打印出pa和pb: void test3(int* pa,int* pb) { pa = pb; printf("调用函数时:\n"); printf("pa指针存储内容...test4,在函数内部将pb解引用ppa.并在过程打印出pa和pb: void test4(int** ppa, int* pb) { *ppa = pb; printf("调用函数时...test5,在函数内部将arr成员为0,1,2,3,4.并在过程打印出arr数组成员: void test5(int arr[]) { //修改arr数组成员 for (int i...这是因为在C语言中,数组名就是数组首元素地址,因此我们看似test5函数传入是arr名字,但实际上test5函数接收到却是arr数组地址,因此该函数同样可以写为: void test5(...,我们更改了头指针plist指向,因此在函数要使用到二级指针. 3.链表时尾插逻辑 逻辑图示:(紫色线条代表操作) 物理图示:(紫色线条代表操作) 可以看到,在链表时尾插我们更改

11810

【专业技术第十三讲】指针和内存泄露

解决方案: 引言 对于任何使用C语言的人,如果问他们C语言最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏。这些的确是消耗了开发人员大多数调试时间事项。...内存缺省初值究竟是什么并没有统一标准,尽管有些时候为零,我们宁可信其无不可信其有。所以无论用何种方式创建数组,都别忘了初值,即便是也不可省略,不要嫌麻烦。...在上面的代码语句中,开发人员 memoryArea 指针赋值 newArea 指针。结果,memoryArea 以前所指向内存位置变成了孤立,如下面的图 5 所示。...这里正确实现应该为: free( memoryArea->newArea); free(memoryArea); 返回正确处理 有时,某些函数会返回对动态分配内存引用。...始终正确处理返回动态分配内存引用函数返回。 每个 malloc 都要有一个对应 free。 确保您不是在访问指针

1.2K80

this指针介绍和用法

记录时间:2019-3-4 this指针介绍 this指针是面向对象程序设计一项概念,在C++,它表示当前运行对象。在实现对象方法时,this指针来获得该对象自身引用。...也就是说,即使你没有写上this指针,编译器在编译时候也是加上this,它作为静态成员函数隐含形参,对各成员访问均通过this进行。 4.this到底是什么?...例如,当调用成员函数a.volume时,编译系统就把对象a起始地址this指针,于是在成员函数引用数据成员时,就按照this指向找到对象a数据成员。...同样如果有b.volume( ) ,编译系统就把对象b起始地址成员函数volumethis指针,显然计算出来是长方体b体积。this指针是隐式使用,它是作为参数被传递给成员函数。...aa;//*this操作该成员函数对象,在这里是对象a1 //对象aaa1,aa具有的数据成员a1数据成员 } int main() { A a1, a2(3, 4)

48020

字符函数,字符串函数及部分函数模拟实现

islower函数判断ch存放是不是小写字符 { //若是小写字母,则返回一个0整形 printf("YES"); //若不是小写字母...我们再调试一次: 我们会发现,这两种数组赋值结果有一个小区别,就是字符串结尾是否有'\0' ,通过这两个例子我们知道,若是用ch2赋值方式,则只会将花括号数组,而若是用ch1赋值方法...,则不仅会将引号数组,最终还会在字符串末尾自动添加一个'\0' ; 而其最终结果又会是什么呢?...但这个结果并不是固定不变,由于内存存放数是随机,故当我们重新生成一个程序之后,其结果会变为另外一个随机; 模拟实现: 方法1: 我们知道strlen函数遇到'\0'就会停止,故我们可以使用一个循环...= *src++); //src字符串元素赋值dest字符串之后 return ret; //返回dest首元素地址 } void main() { char

8010

指针--解决疑惑

/article/37516.htm 好久没有用过C/C++二级指针了,总觉它就是指针指针,没什么大不了,但是今天看到一道面试题,感觉自己对二级指针理解还是不够深刻。...分析:str是一个指针,指向NULL,形参p也是一个指针,初始也指向NULL,在GetMemory函数,这个指针又指向了新开辟空间。...正确方法应该采用双指针,程序如下: #include "stdafx.h" #include using namespace std; void GetMeory(char **...而调用GetMemory函数时,传递是str地址,p是一个二级指针,*p是一个指针。因此,str地址临时变量p,则*p就是指针str,改变*p就相当于改变str。...只是把第一个链表地址赋值了pp,,但是并没有改变*p指向 下面的pp->pNext = last;只是pp了新 就如同 #include"stdio.h" #include"stdlib.h

65170

C++数据类型

基本内置类型:编译器内置基本类型,包括算数类型(字符、整型数、布尔、浮点数)和类型void 复合类型:基于其他类型定义类型,包括数组、C风格字符串、指针、引用、C风格结构体(POD)和联合体(...比如8比特大小unsigned char可以表示0~255,如果我们-1给它将会得到255 当我们带符号类型一个超出它表示范围时,结果是未定义,程序可能会继续工作、可能崩溃,也可能产生垃圾数据...实际开发过程,我们尽量等定义了对象之后再定义指向它指针,如果实在不清楚指针应该指向何处,那么将它初始化为nullptr,这样程序就能检测并指导它有没有指向任何具体对象了。...C++11我们可以用字面量nullptr初始化指针来得到指针,它可以被转化成任意其他指针类型。...void*是一种特殊指针类型,可以存放任意对象地址,一般只能做如下操作: 拿void*指针和别的指针比较 作为函数输入输出 赋值另一个void*指针 自定义数据结构 C++允许用户以类形式自定义数据类型

92020

const那些事

在我们使用c/c++时候,或者在面试时候,会被问道与const相关问题,比如const修饰放在指针哪个位置,const修饰引用传递与传递等等,这些究竟是什么个情况,本节就是专门来解决const...const int p = 10; const void * vp = &p; void *vp = &p; //error 另外一个重点是:允许把const对象地址指向const对象指针。...const对象地址const对象指针: const int *ptr; int val = 3; ptr = &val; //ok 我们不能通过ptr指针来修改val,即使它指向是非...允许把const对象地址赋值const对象指针,如果要修改指针所指向对象,必须通过其他方式修改,不能直接通过当前指针直接修改。...小结:对于内部数据类型输入参数,应该传递”方式改为“const 引用传递”,目的是提高效率。例如void func(A a) 改为void func(const A &a)。

60530

数据结构-单链表

1 链表概念及结构 概念:链表是一种物理存储结构上连续、顺序存储结构,数据元素逻辑顺序是通过链表指针链接次序实现 。  ...,然后新节点tailnext即可。...指向这个头节点,但是头插之后头节点就是新插入这个节点,所以需要使用二级指针,最后新节点newnode*pphead,这样头节点就更新了。...,然后暴力检查链表是否为,不为则创建一个变量newnode来保存头节点next,然后free掉头节点,再将newnode*pphead。...正确方法应该是posnext指向newnodenext,相当于先将newnodenext指向pos后一个节点形成newnode尾部链接,再将posnext指向newnode完成newnode

7710

C++中指针和引用区别

不存在指向引用,但是存在指向指针。...在C++指针和引用经常用于函数参数传递,然而,指针传递参数和引用传递参数是有本质上不同指针传递参数本质上是 传递方式,它所传递是一个地址。...引用是操作受限了指针(仅容许取内容操作)。 ★《高质量C/C++编程指南》6.6     引用是C++概念,初学者容易把引用和指针混淆一起。...因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以 该变量。...const double &dr = dval + 1.0; 上面,同样初始化对于const引用是不合法导致编译错误。

4.9K82

c++面试题中经常被面试官面试小问题总结(二)(本篇偏向指针知识)

如要将二维数组指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素一维数组。  ...p=a;        //将该二维数组首地址p,也就是a[0]或&a[0][0]  p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] 所以数组指针也称指向一维数组指针...如要将二维数组指针数组: int *p[3]; int a[3][4]; p++; //该语句表示p数组指向下一个数组元素。...比如要表示数组i行j列一个元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 优先级:()>[]>* 6.下面输出是什么?...Nanjing jing g 其他应该没有疑问就说一下第一个

48430

熬夜整理万字CC++总结(二),值得收藏

释放时置 NULL 当指针p指向内存空间释放时,没有设置指针p为NULL。delete和free只是把内存空间释放了,但是并没有指针p为NULL。...<<*p<<endl;这一行不可以执行,void*指针只可以储存变量地址,不可以直接操作它指向对象 由于void类型,只保存了指针,而丢失了类型信息,我们不知道他指向数据是什么类型,只指定这个数据在内存起始地址...test01(){ //定义指针 int* p = NULL; //指针指向谁,就把谁地址指针 int a = 10; p = &a; *p = 20;//*在左边当左,必须确保内存可写...: c类型是什么?...return 0; } 根据上面实例可以看到,浅复制仅复制对象本身(其中包括是指针成员),这样不同被复制对象成员对应指针会指向同一对象,被成员指针引用对象成为共享,无法直接通过指针成员安全地删除

1.2K20

c专题之指针---野指针指针解析

C语言中,如果一个指针不指向任何数据,我们就称之为指针,用NULL表示,例如: int *a = NULL; NULL在C/C++定义为: #ifdef...*)0 // 在CNULL是强制类型转换为void *0 #endif 说明:a、在C语言中,int *p;你可以p = (int *)0;但是不可以p = 0;因为类型不相同。...所以NULL实质其实就是0,然后我们指针初值为NULL,其实就是让指针指向0地址处。为什么指向0地址处?2个原因。...三、总结: 现在看完文章,你应该指针使用一定要注意初始化,否则就会出现问题。...再次强调一下:void 指针指针 NULL 不同,NULL 说明指针不指向任何数据,是“”;而 void 指针实实在在地指向一块内存,只是不知道这块内存是什么类型数据。

1.5K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券