×

结构体指针强转char指针

结构体指针强转char指针(字符指针强制转换结构体指针的问题)

admin admin 发表于2024-09-27 14:38:22 浏览2 评论0

抢沙发发表评论

其实结构体指针强转char指针的问题并不复杂,但是又很多的朋友都不太了解字符指针强制转换结构体指针的问题,因此呢,今天小编就来为大家分享结构体指针强转char指针的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

字符指针强制转换结构体指针的问题

分类: 电脑/网络 》》 程序设计 》》 其他编程语言 问题描述: 我这里有这样的结构体 struct roadmap_db_section { char name; int first;int next; int size; int count; }; 然后有这样一条语句: char * c = &ss(其中ss为一个文件内容在内存中的首地址) struct* s = (struct roadmap_db_section *) c; 我想问的是,这个字符型的指针,怎么就能强制转化为结构体类型的指针呢?转换后这个结构体指针和字符指针之间是什么关系啊? 新手分数不多,希望见量:) 解析: 指针说白了就是地址,32位机中地址是用long表示的,所以指针是可以相互转换的,只是转换后寻址方式不同了而已. 上面的roadmap_db_section的在内存中占28字节,转成char*就相当于一个char c中,后面的每四位作一个整数

c和c++中,对结构体进行强制类型转换!

看到一款数据库语法解析器的代码,其中的词法分析语法解析阶段,利用一个结构体存储所解析的SQL语句的类型,然后根据这个类型将改结构体强制转换为对应的另一结构体并赋值给他,以便做进一步的执行工作. 举个简单的例子: 存储语法解析后数据的结构体(注意,其只有一个元素)为: struct analyse { int type; }; 我们约定的不同的type代表不同的SQL操作,假如type=1时表示alter table操作,type=2时表示select操作,type等于3时表示create table操作等等.那么我们对不同的操作有不同的结构体来存储信息,例如: struct alter { int type; int number; char subtype; ...... ...... }; struct select { int type; char relnum; long tablenum; ...... ...... }; 注意到,结构体analyse,alter与select中第一个元素的类型都是一样的,表示的意思也相同,都是代表不同的操作号.现在若判断analyse中的type为1时,就将其强制转换为struct alter并赋值给struct alter类型的变量;若判断analyse中的type为2时,就将其强制转换为struct select并赋值给struct select类型的变量. 可能有人会问了,为什么程序里要对类型不同的结构体之间强制转换并赋值呢? 问题解析 问题的关键在于,结构体struct analyse中的type存储不同的值时,在紧挨着结构体的内存中按照要强制转换的结构体的元素类型存储了相对应的数据. 例如,当结构体struct analyse中的type为1时,需要在紧挨着结构体struct analyse的高地址区域按照结构体struct alter的数据类型存储对应的数据,包括int,char等等.当结构体struct analyse中的type为2时,需要在紧挨着结构体struct analyse的高地址区域按照结构体struct select的数据类型存储对应的数据,包括char,long等. 这样,在进行强制转换时,结构体struct analyse与结构体struct analyse中除了int type以外的那些元素就可以得到相对应的值了. 简单的小例子 下面是一个简单的小例子,说明了该强制转换的问题: struct A{ int num; }; struct B{ int num; char type; int age; }; int main() { struct A a; a.num=1; char* tmp1=(char *)(&(a.num)); tmp1=tmp1+4; *tmp1=’a’; int *tmp2=(int *)(&(a.num)); tmp2=tmp2+2; *tmp2=100; struct B *b=(struct B *)(&a); printf(“ b-》num=%d b-》type=%c b-》age=%d \n”,b-》num,b-》type,b-》age); }

c 语言 结构体中关于强制类型转换(涉及到成员)【【牛人专解题~~】】

结构体在内存里是连续存放的。按照你定义的结构,每一个ft3frame变量里有一个两字节的short型变量,6个dataset变量,每个dataset有16个一字节的char,一个两字节的short,于是内存中就是两字节short,然后16个一字节char,再两字节short,再16个一字节char。。你把fp1的地址给了ptr,由于它是char型指针,取内容和自增都是以一个字节为单位。你的编译器是把未初始化的变量置为0,所以所有的short型数据都是0.所以指针在内存中移动的时候出现了以上结果。

MFC socket传送struct结构,接收端出现乱码

(char*)(&PCDrive + isend) 改为:(char*)(&PCDrive) + isend接收部分也这么改一下:(char*)(&PCDrive2) + irecv 原因在于,(char*)(&PCDrive + isend) 运行时,会先取结构指针,然后结构指针加上偏移,等于向后移动了多少个结构;你本来就只有一个结果,只要移动一个,指针指向的地址就是非法的了;所以发送和接收的都是乱码; 你这个表现应该是偶尔乱码,偶尔又正常

G->vexs[i]=(char)i是什么意思

代码不完全,只能猜测;仅供参考G;是一个结构体指针struct st{//结构体的大致结构char vexs;...};G-》vexs=(char)i上面意为:将变量i先强制转换类型(转换成char),然后赋值给G所指向的结构体变量的成员数组vexs的一个元素(下标为i)

C语言中如何判断两个结构体中每项内容完全相等,除了对每个分量逐个比较外,还有其他办法吗

只能进行对比,但是你要是每个成员写出来对比的话是很麻烦的事你可以用一个循环然后使用两个指针将两个结构体强制转换为char类型指针再将这两个字符指针一 一对比这样就能检查是否相等了。

请问这道关于结构体指针的题目是怎么算

结构体中声明有错误, 1A不能是变量sizeof(struct tagABC) = 4本题根据系统的不同结果也不尽相同, 这儿假设系统是32位的,且char占一个字节(byte),unsigned long 占4个字节pAbc是struct tagABC类型的指针,所以每次pABC+1时都是加一个struct tagABC大小的值,即要加4所以pAbc+0x100 = 0x100000 + 4*0x100 = 0x100000 + 0x400 = 0x100400(ULONG)pAbc将pAbc强制转为无符号长整型,所以直接加所以(ULONG)pAbc+0x100= 0x100100 ;(ULONG*)将pAbc强制转为无符号长整型的指针,且sizeof(unsigned long) = 4所以pAbc+0x100 = 0x100000 + 4*0x100 = 0x100000 + 0x400 = 0x100400(char *)pAbc将pAbc强制转为char型指针, sizeof(char)=1所以(ULONG)pAbc+0x100= 0x100100

关于结构体指针强转char指针和字符指针强制转换结构体指针的问题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。