社区
C语言
帖子详情
把一个char * 类型的数据赋值给一个void * 类型的数据的具体实现是怎么样的??
橡皮擦
2012-03-06 08:27:43
我知道会发生强制类型转换,char * 是指向一个字节的指针, 转换成void * 是什么样的??很不明白
...全文
1588
9
打赏
收藏
把一个char * 类型的数据赋值给一个void * 类型的数据的具体实现是怎么样的??
我知道会发生强制类型转换,char * 是指向一个字节的指针, 转换成void * 是什么样的??很不明白
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
L194WT
2012-03-07
打赏
举报
回复
指针的本质就是一个int数据变量,存的是地址而已。int *p,char *p ,像这样char,int是修饰(*p),*p是p指向地址的内容,实际上是这个char是修饰的不是p本身存的内容。viod *是万能指针,就是说这个指针指想的的内容可以是任何类型。
wenjinghuan999
2012-03-06
打赏
举报
回复
转换来转换去无非是个地址,地址根本没变,只是编译器看待他的类型变了
东莞某某某
2012-03-06
打赏
举报
回复
将字符串地址传给void* 编译器可将该地址解释为任何类型,比如函数体内执行转换(int*),除此之外,什么都一样,数据一样,字符串地址也不变
飞天絮雪
2012-03-06
打赏
举报
回复
对于void *,可以转换为任意类型指针,而无需强制转换。
char * 是指向一个字节的指针, 转换成void * 一般用于:希望输出成地址的任何指针变量。
看下面的demo:
01.#include <iostream>
02.using namespace std;
03.
04.int _tmain(int argc, _TCHAR* argv[])
05.{
06. char *word = "again";
07. cout<<"Value of word is: "<<word<<endl
08. <<"Value of static_cast<void*>(word) is:"
09. <<static_cast<void*>(word)<<endl;
10. system("pause");
11. return 0;
12.}
运行结果:static_cast<void*>(word)是的地址。
具体可参考我的博客:
http://blog.csdn.net/feitianxuxue/article/details/7308063
欢迎提出意见
飞天絮雪
2012-03-06
打赏
举报
回复
对于void *,可以转换为任意类型指针,而无需强制转换。
char * 是指向一个字节的指针, 转换成void * 一般用于:希望输出成地址的任何指针变量。
看下面的demo:
01.#include <iostream>
02.using namespace std;
03.
04.int _tmain(int argc, _TCHAR* argv[])
05.{
06. char *word = "again";
07. cout<<"Value of word is: "<<word<<endl
08. <<"Value of static_cast<void*>(word) is:"
09. <<static_cast<void*>(word)<<endl;
10. system("pause");
11. return 0;
12.}
运行结果:static_cast<void*>(word)是的地址。
具体可参考我的博客:
http://blog.csdn.net/feitianxuxue/article/details/7308063
欢迎提出意见
飞天絮雪
2012-03-06
打赏
举报
回复
对于void *,可以转换为任意类型指针,而无需强制转换。
char * 是指向一个字节的指针, 转换成void * 一般用于:希望输出成地址的任何指针变量。
看下面的demo:
01.#include <iostream>
02.using namespace std;
03.
04.int _tmain(int argc, _TCHAR* argv[])
05.{
06. char *word = "again";
07. cout<<"Value of word is: "<<word<<endl
08. <<"Value of static_cast<void*>(word) is:"
09. <<static_cast<void*>(word)<<endl;
10. system("pause");
11. return 0;
12.}
运行结果:static_cast<void*>(word)是的地址。
具体可参考我的博客:
http://blog.csdn.net/feitianxuxue/article/details/7308063
欢迎提出意见
justkk
2012-03-06
打赏
举报
回复
数据本身没变,它还是它,就是看你用什么眼光来看待它
你可以认为它是char *,也可以认为它是void *
对于void *,可以转换为任意类型指针,而无需强制转换
justkk
2012-03-06
打赏
举报
回复
数据本身没变,它还是它,就是看你用什么眼光来看待它
你可以认为它是char *,也可以认为它是void *
对于void *,可以转换为任意类型指针,而无需强制转换
justkk
2012-03-06
打赏
举报
回复
数据本身没变,它还是它,就是看你用什么眼光来看待它
你可以认为它是char *,也可以认为它是void *
对于void *,可以转换为任意类型指针,而无需强制转换
关于const
char
*和
char
*、const
char
** 和
char
**
赋值
问题
根据ANSI C标准的
赋值
约束条件: 1. 两个操作数都是指向有限定符或无限定符的相容
类型
的指针。 2. 左边指针所指向的
类型
必须具有右边指针所指向
类型
的全部限定符。 一、const
char
*和
char
* const
char
*的
类型
是:“指向
一个
具有const限定符的
char
类型
的指针”。(不能修改其值)
char
*的
类型
是:“指向
一个
char
类型
的指
const
char
**与
char
**
赋值
一直以来都遇到
一个
问题:
void
fun1(const
char
** p1);
void
fun2(
char
** p2){ fun1(p2);} 每次编译都没法通过,一直都不知道真正的原因。直到前两天看了一本书,我才理解。 原来C语言规范中有这样的要求:每个实参都应该具有自己的
类型
,这样它的值就可以
赋值
给他所对应的形参
类型
的对象(该对象的
类型
不能含
C语言
char
**,
char
*,
char
s[]
赋值
char
**,
char
*,
char
s[]
赋值
的方式是不同的,当你搞混的时候,系统会报出段错误(Segmentation Fault),所以有必要做
一个
总结。
void
类型
不能用来初始化
char
*
类型
的实体
最近在看黑马c++教程,他们直接用test02()函数是可以直接运行的,而我用的是VS2019,会报错, 报错内容为:
void
类型
不能用来初始化
char
*
类型
的实体。 查看了一些方法比如定义为const
char
*,或者在属性里面设置符合模式为否都不好用。 再看一遍报错,
void
类型
不能用来初始化
char
*
类型
的实体,那么只需要转换
类型
就可以了,所有在分配内存空间时直接强制转换成字符型指针空间。
具体
为什么在旧版本vs不报错而在新版本报错我也没理解,欢迎c++大佬来探讨。 #define _CR
[C++]关于
char
*的
赋值
问题
char
*p="ABCDE"; *p='s';//错误 p指向
一个
const
char
类型
的量,无法更改数组内容。 那么C++教程上一段程序:
void
reverse(
char
*s) {
char
*p,*q,temp; p=s; q=s+strlen(s)-1; while(p<q){ temp=*p; ...
C语言
70,028
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章