首页
学习
活动
专区
工具
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* 之类转换,其本身并不安全) 也允许任何整数类型转换为任何指针类型以及反向转换

4.9K41

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

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

3.6K50

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

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

18110

C++ const各种用法总结

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

1.9K10

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

个成员 IPv4地址和TCPUDP端口号套接字地址结构总是以网络字节序(区别于主机字节序)来存储。...这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是目标存储单元大小,用于防止缓冲区溢出,为了有助于指定这个大小

77530

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.8K10

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

* c_p = &c; //1.定义一个常量指针 int* m = const_cast(c_p);//2.常量指针const_cast转为一个新非常量指针 *m = 7;//3.通过指向常量非常量指针修改常量内容...下面的代码利用C++11type_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指令级内存保护(只读),所以是不能被修改,虽然修改全局常量类成员静态常量代码也能编译通过,实际运行时会抛出内存访问冲突异常。

52840

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 * 型,用户使用这个指针时候,要进行强制类型转换,也就是显式说明该指针指向内存是存放什么类型数据

20930

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

引用只是别名,不占用具体存储空间,只有声明没有定义;指针是具体变量,需要占用存储空间。...指针指向虚函数表,即虚函数表不是函数,不是程序代码,不可能存储代码段 虚函数表存储虚函数地址,即虚函数表元素是指向类成员函数指针,而类虚函数个数在编译时期可以确定,即虚函数表大小可以确定...不考虑类情况 const常量定义时必须初始化,之后无法更改 const形参可以接收constconst类型实参,例如 // 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 *pconst int *p。...析构函数可以是纯虚函数,含有纯虚函数类是抽象类,此时不能被实例化。派生类可以根据自身需求重新改写基类纯虚函数。 构造函数: 构造函数不能定义为虚函数。...volatile 指针 volatile 指针const 修饰词类似,const 有常量指针指针常量说法,volatile 也有相应概念 修饰由指针指向对象、数据是 const volatile

2K10

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.1K40

嵌入式 C 语言(上)

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

1.3K30

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); /

25710

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对象引用或者指针

9510

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

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

3K01

《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.3K10

基础知识_Cpp

Cpp如何禁止一个类创建对象 1.构造函数设置为protectedprivate。 2.类内声明纯虚函数。...指针和引用区别 指针也是一个变量,里面存储内容是一个地址。而引用本质上是一个常量指针,引用只允许初始化,不能再修改。 编译指针和引用代码,汇编上是一样:c++,引用和指针区别是什么?...使用方式 //方式一 weak_ptr w(sp); //方式二 weak_ptr w; w=p;//p可以是shared_ptrweak_ptr。...基类必须要有虚函数,因为 dynamic_cast 是运行时类型检查,需要运行时类型信息,而这个信息是存储虚函数表。...= dynamic_cast(r_CBase); // 基类对象引用转换派生类对象引用 3.const_cast(常量转换) 常量指针引用)与非常量指针引用)之间转换

1.9K30

【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.友元类 友元类所有成员函数都可以是另一个类友元函数

71630
领券