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

将指向T的指针存储在void*中,但T可以是const或非const-使用void const*或只是void*?

将指向T的指针存储在void中,可以使用void const或只是void*,具体取决于指针所指向的数据是否为常量。

如果T是const类型,即指向的数据是常量,那么应该使用void const来存储指针。这是因为void const是一个指向常量数据的指针,它可以接受指向任何类型的常量数据的指针,并且可以保证不会修改这些数据。

如果T是非const类型,即指向的数据不是常量,那么可以使用void来存储指针。void是一个通用指针类型,可以接受指向任何类型的数据的指针,包括非常量数据的指针。

使用void*存储指针的优势是可以在不知道具体数据类型的情况下进行存储和传递,这在某些情况下非常有用,例如在实现通用数据结构或函数接口时。

对于这个问题,腾讯云提供了多种相关产品和服务,如云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方网站:https://cloud.tencent.com/

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

相关·内容

C语言与C++面试知识总结

(); // 返回一个指向变量的常指针,使用:int* const p = function7(); static 作用 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在...修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在 static 函数内不能访问非静态成员。 this 指针 this 指针是一个隐含于每一个非静态成员函数中的特殊指针。...位域在内存中的布局是与机器有关的 位域的类型必须是整型或枚举类型,带符号类型中的位域的行为将因具体实现而定 取地址运算符(&)不能作用于位域,任何指针都无法指向类的位域 extern "C" 被 extern...纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。 虚函数在子类里面可以不重写;但纯虚函数必须在子类实现才可以实例化子类。...允许将任何指针转换为任何其他指针类型(如 char* 到 int* 或 One_class* 到 Unrelated_class* 之类的转换,但其本身并不安全) 也允许将任何整数类型转换为任何指针类型以及反向转换

5K41

什么?CC++面试过不了?因为你还没看过这个!

(); // 返回一个指向变量的常指针,使用:int* const p = function7(); static 作用 修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main...修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在 static 函数内不能访问非静态成员。 this 指针 this 指针是一个隐含于每一个非静态成员函数中的特殊指针。...位域在内存中的布局是与机器有关的 位域的类型必须是整型或枚举类型,带符号类型中的位域的行为将因具体实现而定 取地址运算符(&)不能作用于位域,任何指针都无法指向类的位域 extern "C" 被 extern...纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。 虚函数在子类里面可以不重写;但纯虚函数必须在子类实现才可以实例化子类。...允许将任何指针转换为任何其他指针类型(如 char* 到 int* 或 One_class* 到 Unrelated_class* 之类的转换,但其本身并不安全) 也允许将任何整数类型转换为任何指针类型以及反向转换

3.7K50
  • 嵌入式软件开发常用的关键字和运算符

    1、volatile关键字 volatile是一个特征修饰符,提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,告诉编译器对该变量不做优化,都会直接从变量内存地址中读取数据...在定义1中const限定的是*p1,即其指向空间的值不可改变,若改变其指向空间的值如*p1=10,则程序会报错;但p1的值是可以改变的,对p1重新赋值如p1=&k是没有任何问题的。...在定义2中const限定的是指针p2,若改变p2的值如p2=&k,程序将会报错;但*p2,即其所指向空间的值可以改变,如*p2=20是没有问题的,程序正常执行。...4、 修饰函数参数 const关键字修饰函数参数,对参数起限定作用,防止其在函数内部被修改,所限定的函数参数可以是普通变量,也可以是指针变量。...void* 指针可以指向任意类型的数据,在C语言指针操作中,任意类型的数据地址都可转为void* 指针。因为指针本质上都是unsigned int。

    21910

    C++ const各种用法总结

    然而如果该指针指向的是一个没const 对象(如cdptr),可用其他方法修改其所指向的对象。 那么如何将一个const 对象合法地赋给一个普通指针???...七 使用const的一些建议 1.要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委; 2.要避免最一般的赋值操作错误,如将const变量赋值; 3.在参数中使用const应该使用引用或指针...,而不是一般的对象实例,原因同上; 4.const在成员函数中的三种用法(参数、返回值、函数)要很好的使用; 5.不要轻易的将函数的返回值类型定为const; 6.除了重载操作符外一般不要将返回值类型定为对某个对象的...const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝...编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

    2K10

    UNIX网络编程卷1(第三版)套接字编程简介

    个成员 IPv4地址和TCP或UDP端口号在套接字地址结构中总是以网络字节序(区别于主机字节序)来存储。...这4个函数的其中两个参数是指向某个套接字地址结构的指针和指向表示该结构大小的整数变量的指针(这是一个结果,所以是引用传值)。...,如0x12345678,在内存中从小到大的地址,存储序列是 12 34 56 78 以上两种格式都有系统使用!...(const void *ptr1, const void *ptr2, size_t nbytes); // 0为相同,非0为不相同 地址转换函数 作用:从点分十进制数串(如:206.168.112.96...void *addrptr, char *strptr, size_t len); // 成功则返回指向结果的指针,出错返回NULL,len是目标存储单元的大小,用于防止缓冲区溢出,为了有助于指定这个大小

    81030

    void指针进阶用法

    比如char *型指针,自增一定是指针指向的地址加1,short *型指针自增,则偏移2。 在C/C++中,在任意时刻都可以使用其它类型指针来代替void指针,或者用void指针来代替其他类型指针。...这是因为空指针没有与之关联的数据类型。 编译器无法知道void指针指向的数据类型。 因此,要获取由void指针指向的数据,需要使用在void指针位置内保存的正确类型的数据进行类型转换。...size_t); __EFF_NENR1R1 __DEPREC_ATTRS void * memset(void *, int, size_t); 非易失存储管理应用 在单片机开发中,往往需要实现数据的非易失存储...所谓非易失存储,就是数据改写后在掉电后仍然能保持。哪些是非易失存储介质呢?比如EEPROM,FLASH等都属于非易失存储介质。 比如一个产品里面有很多各种各样的参数,且分布在各个子系统文件中。...ki; float kd; float T; }T_PID; T_PID pidParas; 面对这样一个需求,要实现非易失存储,我在将底层的EEPROM/FLASH读写函数实现的基础上,

    1.9K10

    C++11 利用const_cast和type_traits修改类成员常量的通用模板函数

    * c_p = &c; //1.定义一个常量指针 int* m = const_cast(c_p);//2.将常量指针用const_cast转为一个新的非常量指针 *m = 7;//3.通过指向常量的非常量指针修改常量内容...下面的代码利用C++11中的type_trait(类型萃取)将代码简化为两行,其基本原理是通过指向常量的引用来修改常量的内容 const int c = 21; //下面两行代码实现修改常量c auto...type>(c);//1.定义一个指向常量c的非常量引用 r_c=5;//2.通过指向常量的引用来修改常量的内容 在第一行代码中先用decltype获取c的类型,结果是 const int, 然后用...(u1,u2);//修改对象常量 modify_const只是在C++语法上实现了修改const修饰的常量,其实只对类成员常量以及非基本类型的局部常量有效,对于函数局部基本类型常量修改是无效的。...对于全局常量或类的静态常量成员,因为位于程序的常量存储区,受CPU指令级的内存保护(只读),所以是不能被修改的,虽然修改全局常量或类成员静态常量的代码也能编译通过,但实际运行时会抛出内存访问冲突的异常。

    54340

    CC++面试必备知识

    修饰指针 const修饰指针——常量指针( const int *p = &a ),指针的指向可以修改,但是指针指向的值不可以修改。...const修饰常量——指针常量( int * const p = &a ),指针的指向不可以修改,但是指针指向的值可以修改。...const即修饰指针,又修饰常量(const int * const p = &a ),指针的指向不可以修改,指针指向的值也不可以修改. extren extern表明变量或者函数是定义在其他其他文件中的...memcpy函数的用法,memcpy (void* _Dst,void const* _Src,size_t _Size) memcpy函数是将后面地址的内容一个数据一个数据放在前面的地址,注意,是先放低位...在内存的分配中我们可以见到 void 指针使用:内存分配函数 malloc 函数返回的指针就是 void * 型,用户在使用这个指针的时候,要进行强制类型转换,也就是显式说明该指针指向的内存中是存放的什么类型的数据

    22930

    《逆袭进大厂》之C++篇49问49答(绝对的干货)

    引用只是别名,不占用具体存储空间,只有声明没有定义;指针是具体变量,需要占用存储空间。...指针,指向虚函数表,即虚函数表不是函数,不是程序代码,不可能存储在代码段 虚函数表存储虚函数的地址,即虚函数表的元素是指向类成员函数的指针,而类中虚函数的个数在编译时期可以确定,即虚函数表的大小可以确定...不考虑类的情况 const常量在定义时必须初始化,之后无法更改 const形参可以接收const和非const类型的实参,例如 // i 可以是 int 型或者 const int 型 void fun...,所以不能在类中声明时初始化 const成员函数:const对象不可以调用非const成员函数;非const对象都可以调用;不可以改变非mutable(用该关键字声明的变量可以在const成员函数中被修改...析构函数可以是纯虚函数,含有纯虚函数的类是抽象类,此时不能被实例化。但派生类中可以根据自身需求重新改写基类中的纯虚函数。 构造函数: 构造函数不能定义为虚函数。

    2.6K40

    C++ 万字长文第二篇---拿下字节面试

    从存储空间角度,虚函数对应一个虚函数表,而指向虚函数表的虚函数指针是存储区对象内存内的。...空类的大小 在 C++ 中规定类的大小不为 0,空类大小为 1,当类不包含虚函数和非静态成员时,其对象大小也为 1。若存在虚函数,则需要存储一个虚函数指针大小,在 32 位上为 4 字节。.../* (TYPE*)0 将零转型成 TYPE 类型指针 ((TYPE*)0->MEMBER) 访问结构体中的成员 &((TYPE*)0->MEMBER) 取出数据成员地址,也就是相对于零的偏移量 (size_t...缺点在于在非并行计算中,效率未必有 for 循环快,并且不容易调试,对于没学过的程序员来说可读性差。...,但现在不再使用或者没有任何指针再指向的内存空间就称为 "垃圾"。

    1.4K20

    《逆袭进大厂》之C++篇49问49答

    引用只是别名,不占用具体存储空间,只有声明没有定义;指针是具体变量,需要占用存储空间。...指针,指向虚函数表,即虚函数表不是函数,不是程序代码,不可能存储在代码段 虚函数表存储虚函数的地址,即虚函数表的元素是指向类成员函数的指针,而类中虚函数的个数在编译时期可以确定,即虚函数表的大小可以确定...大小是4 return 0; } 15、常量指针和指针常量区别? 常量指针是一个指针,读成常量的指针,指向一个只读变量。如int const *p或const int *p。...析构函数可以是纯虚函数,含有纯虚函数的类是抽象类,此时不能被实例化。但派生类中可以根据自身需求重新改写基类中的纯虚函数。 构造函数: 构造函数不能定义为虚函数。...volatile 指针 volatile 指针和 const 修饰词类似,const 有常量指针和指针常量的说法,volatile 也有相应的概念 修饰由指针指向的对象、数据是 const 或 volatile

    2K10

    嵌入式 C 语言(上)

    ,在普通C语言编程中,直接调用printf()函数即可在PC上打印出;而在嵌入式中,则需要开发者使用C语言去将芯片的串口调试成功,然后将printf()函数重新实现,方可调用打印。...在一个工程系统中,硬件驱动仅仅只是 第一步,对硬件的应用则是一个功能丰富的系统的更进一步的设计,通常在这一块会设计到例如图 像处理、数据处理等算法;我们可以笼统的将一个嵌入式工程系统分为驱动层和应用层...数据类型 在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统,变量的类型决定了变量存储占用的空间以及如何解释存储的位模式。...这里建议开发者在开发过程中使用库定义的数据类型,来定义变量或函数,比如unsigned char a,使用uint8_t a。...修饰函数参数 在C语言中const修饰函数参数对参数起限定作用,防止其在函数内部被意外修改,所限定的参数可以是 普通变量也可以是指针变量,如: void fun(const int x) { ...

    1.4K30

    const 使用总结

    但是有时候我们确实是想在不同文件之间共享同一个变量,也就是只在一个文件中定义它,在其他文件里声明并使用它。...const和指针与引用一样,指针也可以指向常量或非常量,指向常量的指针不能用于修改其所指对象的值,常量对象的地址只能存放于指向常量的指针中:const int i = 1024;int *p = &i;...// 错误,不能存放常量的地址const int *cp = &i;// OK*cp = 0;// 错误,不能给*cp赋值指向常量的指针没有规定一定要指向常量对象,允许它指向一个非常量对象,只是不能通过指针来修改所指对象的值...这就使得我们无法调用常量上的成员函数,为了解决这个问题,需要将this声明为指向常量的指针,即:const A* const this;但this指针是隐式的,我们无法直接声明它,解决方法就是将成员函数声明为...首先,对于顶层const,无论是在实参中还是在形参中都会被忽略。其次对于底层const,允许一个非const对象的引用或者指针转换为const对象的引用或者指针。

    13210

    C++ <cstring>字符串库函数的自定义实现

    减法运算的值是两个指针在内存中的距离(以数组元素的长度为单位,而不是以字节为单位)与数组中存储的元素的类型无关,因为减法运算的结果已经将地址的差值除以该类型占用内存的长度。...char *s2); char *strtok(char *s1, const char *s2); strchr函数在字符串s中搜索字符c,它会返回一个指向s中第一个字符c的指针,如果没找到,则返回空指针...strstr函数在字符串s1中搜索字符串s2,返回找到的第一处匹配子串的指针,如果找不到,则返回空。 strtok函数在s1中搜索,查找一个非空字符序列(称作记号),这个序列不包括s2中指定的字符。...将找到的记号后面的那个字符替换为一个空字符标记该记号的末尾,然后返回一个指向该记号的首字符的指针。使用strtok(NULL,s2)就可以继续上一次的strtok函数调用,直到其返回一个空指针为止。...strlen返回字符串的长度,不包括字符串末尾的空字符。strerror当输入存储在errno的错误码时,会返回一个指向描述这种错误的字符串的指针。

    1.3K40

    C++学习笔记3

    在 C++ 中。函数能够重载。 仅仅要函数中形參的个数或类型不同,则同一个函数名可用于定义不同的函数。编译器将依据函数调用时的实參确定调用哪一个函数。...因此,选出来的函数称为可行函数. 12. 重载和const 形參 可基于函数的引用形參是指向const 对象还是指向非const 对象,实现函数重载。...使用typedef 为指针类型定义同义词,可将函数指针的使用大大简化: typedef bool(*cmpFcn)(const string &, const string &); 在引用函数名但又没有调用该函数时...,对lengthCompare 的不论什么使用都被解释为例如以下类型的指针: bool (*)(const string&, const string &); // 可使用函数名对函数指针做初始化或赋值...指向重载函数的指针 C++ 语言同意使用函数指针指向重载的函数: extern void ff(vector); extern void ff(unsigned int); /

    26910

    C语言文件操作:标准库与系统调用实践

    函数原型 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 参数 ptr:指向要写入文件的数据的指针。...注意事项 fwrite 并不保证将数据实际写入到物理存储设备上;它只是将数据写入到文件系统的缓冲区中。...函数原型 c size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 参数 ptr:指向内存块的指针,该内存块用于存储从文件中读取的数据...read 函数在不同的编程环境中具有不同的实现和用途,但通常都用于从某种数据源(如文件、套接字或内存缓冲区)读取数据。...参数 fd:文件描述符,表示要读取的文件或设备。 buf:指向缓冲区的指针,用于存储读取的数据。 count:要读取的字节数。 3.

    7810

    整理了70道C语言与C++常见问答题

    ; 可以有const指针,但是没有const引用; 指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能 被改变; 指针可以有多级指针(**p),而引用止于一级; 指针和引用使用++运算符的意义不一样...const变量转为非const 2、static_cast 用于各种隐式转换,比如非const转const,void*转指针等, static_cast能用于多态向上转化,如果向下转能成功但是不安全,结果未知...允许将任何指针转换为任何其他指针类型(如 char* 到 int* 或 One_class* 到 Unrelated_class* 之类的转换,但其本身并不安全) 也允许将任何整数类型转换为任何指针类型以及反向转换...举个例子:一个父类类型的指针指向一个子类对象时候,使用父类的指针去调用子类中重写了的父类中的虚函数的时候,会调用子类重写过后的函数,在父类中声明为加了virtual关键字的函数,在子类中重写时候不需要加...存储的是结点,不需要内存拷贝和内存移动。 插入操作只是结点指针换来换去,结点内存没有改变。而iterator就像指向结点的指针,内存没变,指向内存的指针也不会变。

    3.1K01

    深入探讨C++中的双向链表:构建高效数据结构的关键方法与实用技巧(下)

    一、list的数据结构和类实现需求 ✨1.1 数据结构 在 list 的实现中,底层是通过双向链表结构来存储数据。双向链表中的每个节点不仅包含数据,还包含指向前一个节点和后一个节点的两个指针。...内存布局: std::vector是一个动态数组,它在内存中连续存储元素。这意味着std::vector的迭代器可以简单地通过指针(或指针的封装)来实现,因为元素之间的地址是连续的。...代码一致性:在C++编程中,将不会修改对象状态的成员函数声明为const是一种良好的编程习惯。这有助于保持代码的一致性和可预测性,使得其他开发者能够更容易地理解和使用你的类。...T& 是对元素的非 const 引用类型,允许通过迭代器修改元素的值。 T* 是指向元素的指针类型,用于迭代器的内部实现,以便能够访问链表中的下一个节点。...const T* 是指向 const 元素的指针类型,确保迭代器不会修改链表中的元素。

    9010

    《C++Primer》第十九章

    ,如果找到了用户自定义的版本,则使用该版本执行new或者delete表达式 没找到的话,则使用标准库定义的版本 我们可以使用作用域运算符使得new表达式或delete表达式忽略定义在类中的函数,直接执行全局作用域的版本...当仅通过一个地址值调用时,定位new使用operator new(size_t, void*),这是以一个我们无法自定义的operator new版本,它只是简单地返回指针实参,然后由new表达式负责在指定的地址初始化对象以完成整个工作...成员指针是指可以指向类的非静态成员的指针。...void write(); bool isRead() const; void setWrite(); }; 如果可能的话,在类的内部连续定义的位域液压锁在同一整数的相邻位,这意味着前面五个位域可能会存储在一个...unsigned int中,这些二进制位能否压缩到一个整数中以及如何压缩是与机器相关的 取地址运算符&不能作用域位域,因此任何指针都无法指向类的位域 最好将位域设为无符号类型,存储在带符号类型中的位域的行为将因具体实现而定

    1.4K10

    【C++】类和对象核心总结

    所以C++编译器给每个“非静态成员函数”增加了一个隐藏的this指针来作为函数的形参, 并且规定该参数必须在函数形参的最左边位置,这个指针中存储的就是对象的地址,在函数体中所有访问对象成员变量的操作都是通过...所以,只要你不作,你就不用写这两个重载,编译器默认生成的就够用 六、const修饰的类成员函数(const修饰的是成员函数中隐含的this指针所指向的内容,const T* const this) 1....修饰的,说明对象本身不可被修改相当于const Date*或Date const*这样的指针形式 //但类成员函数中的this指针又是Date* const this,至于为什么是这样子, //我们之前提到过...非const成员函数内部可以调用const成员函数,因为在非const成员函数内部,修改或不修改类成员都是可以的。 七、初始化列表(对新创建对象的初始化) a....友元函数可访问类的私有和保护成员,但不是类的成员函数 友元函数不能用const修饰 友元函数可以在类定义的任何地方声明,不受类访问限定符限制 一个函数可以是多个类的友元函数 2.友元类 友元类的所有成员函数都可以是另一个类的友元函数

    76330
    领券