首页
学习
活动
专区
工具
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.5K10

【编程基础】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.9K80
  • 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"打印出来了。

    15910

    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 这种方法正确

    73280

    Java中有关Null9问题

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

    1.2K50

    Java中有关Null9件事

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

    67520

    Java中有关Null9件事

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

    56920

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

    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.链表时尾插逻辑 逻辑图示:(紫色线条代表操作) 物理图示:(紫色线条代表操作) 可以看到,在链表时尾插我们更改

    20410

    【CC++笔记】:易错难点1

    1.设有定义:char *p;,以下选项不能正确字符串赋值字符型指针p语句是( ) 正确答案: A B D 你答案: A p=getchar();...函数返回必须用同类型指针变量来接受,也就是说,指针函数一定有函数返回,而且在主调函数,函数返回必须同类型指针变量。 函数指针: 是指向函数指针变量,即本质是一个指针变量。...函数指针定义为: 函数类型 (变量名)(函数形参表);例如:int (p)(int, int); int (*p) (int x); //声明一个函数指针 p = func; //func函数首地址指针...若d.d210后,d.d1是10 D....若d.d110后,d.d2是10 解析:这题思路应该是:共用体只能存在一个,如果某个赋值后,另一个就不存在;共用一个地址; 11、以下有关C语言说法,错误是( ) 正确答案

    8110

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

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

    9810

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

    解决方案: 引言 对于任何使用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)

    53220

    指针--解决疑惑

    /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

    67070

    C语言详解(动态内存管理)2

    ,紧跟着对指针NULL是很有必要 1.6 动态开辟内存忘记释放(内存泄漏) 动态开辟空间一定要释放,并且正确释放 当我们写代码时候,存在这样一种可能会出现错误,那就是动态开辟内存忘记释放或者因为某些原因还没有到...这个代码意思是申请一块动态内存空间地址交给指针p,通过指针p再交给指针str,再使用strcpy函数字符串拷贝到动态内存空间内,最后打印出字符串 但是get_memory函数传参时候使用是传调用...,所以指针p跟指针str没有关系 有两种纠错方法 方法一: 调用改为传址调用,此时p为二级指针 #include #include #include <...“hello”,然后使用free函数释放这一动态内存空间 但是此时指针str还存着我们开辟动态内存空间地址,正确写法free函数后应紧跟str = NULL;,但是上面的代码并没有这一条语句...struct S* ptr = (struct S*)realloc(ps, sizeof(struct S) + 40 * sizeof(int)); //进行指针判断,保护原地址 if

    9610

    C++数据类型

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

    94720

    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)。

    63430

    数据结构-单链表

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

    8810

    动态内存管理基础详解

    参数和返回: 参数是以字节为单位一个无符号整型,返回void*,指向我们开辟这块空间指针。 注意事项: 如果开辟成功,则返回一个指向开辟好空间指针。...如果开辟失败,则返回一个NULL指针,因此malloc函数返回必须要做检查! 返回类型是void*,所以malloc函数并不知道开辟空间类型,具体在使用时候由使用者自己决定。...每当free函数释放空间后,指针就没有被指向内容,为了防止野指针,需要将其设为控制在(即每次使用free函数后,都需要置成指针) free函数不能释放动态开辟内存空间,这种行为是标准未定义 如果...因此我们应该用一个新指针去接受,然后判断增容是否成功,如果成功,就将新指针内容原有的指针,否则程序结束。...malloc/calloc/realloc返回是否为 3.2、对动态开辟空间越界访问 3.3、对动态开辟内存进行free释放 3.4、使用free释放一块动态开辟内存一部分 注意此时p指向不是我们动态开辟空间起始地址

    9110

    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 其他应该没有疑问就说一下第一个

    50730
    领券