C语言:指针类型强制性转换

标签:C语言 指针 强制性转换

by 小威威

1.引入

我们知道,每个变量都有对应的地址,地址的距离即为地址之差。然而,地址类型不同,也就不能进行减法运算。假如,我现在要求double类型的变量a与int类型的变量b之间地址的距离(以字节作为单位)那么,该怎样实现这一操作呢?

首先,我们知道,地址就是指针,指针就是地址,地址之差即为指针之差,因此不难想到,我们可以将指针转换成同一类型再进行减法运算。但是,需要注意的是,若要以字节作为距离的单位,就一定要定义char*类型。原因是:指针之差得到的数值不一定就是以字节为单位,而是与指针的数据类型有关,即数值 = 字节数/sizeof(数据类型)。所以,若把差值作为以字节为单位的距离时就要将地址强制性转化成char*类型。

2.实例

定义一个结构体类型T包含三个变量分别是double,char,和int类型。实例化一个T,输出此实例在内存中所占空间大小(使用sizeof),输出3个变量分别所占内存大小之和以及3个变量在内存中距离此实例的首地址的长度(以byte为单位)。

注意3个变量必须以double,char,int的顺序排列,比如:

struct T {

double x;

char y;

int z;

}

根据所输出内容理解struct在内存中的组织形式。

输出格式:实例所占内存大小以及3个变量所占内存大小之和在一行,以空格间隔;3个变量在内存中距离实例的首地址长度为一行,以空格间隔。

Hint:

struct在内存中存在自动对齐的功能,所以有些时候并不是其中的每个变量都是紧密排列的,会有一些内存空隙。

代码如下:

# include

struct T {

double x;

char y;

int z;

};

int main(void) {

struct T st;

printf("%lu %lu\n", sizeof(st), sizeof(st.x)+sizeof(st.y)+sizeof(st.z));

printf("%ld %ld ", (char*)&st.x-(char*)&st, (char*)&st.y-(char*)&st);

printf("%ld\n", (char*)&st.z-(char*)&st);

return 0;

}

c语言地址强制转为指针,C语言:指针类型强制性转换相关推荐

  1. c语言 地址+1,C语言中,为什么指针表达式的值+1.对应的地址值却+4?/为什么两个数组元素的地址相减之差不为地址之差?...

    在C语言中,我们常常用到的一个运算是让某个变量的值+1. 例如 M = M + 1. 而在实际运用中,我们发现 对于指针进行+1运算,算出来的结果是+4. 如下图 图中我们定义的 变量M 和指针Mat ...

  2. c语言ip字符串转为数组,C语言 ip地址转换为单个数字

    今天遇到一个面试测试题,如下 请写一段代码,可以将输入为"0.0.0.0"-"255.255.255.255"的字符串转换为int型整数数组. 输入:" ...

  3. C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和a 的区别

    1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...

  4. C语言指针类型 强制转换

    关于C语言指针类型 强制转换  引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...

  5. c语言强制转化指针,C语言指针强制转化的应用

    指针类型强制转化在kernel设计中非常常见,这里记录两个非常有意思的用法: 1.对地址进行运算.任何虚拟地址都表示成void *va  = (void *) 100, *(va + 1) ==101 ...

  6. c语言 void**类型转换,void指针类型强制转换

    如何将一个void*强制转换成行指针类型? void*指针可以转换成任何类型的指针. 强制转换即可,比如 (int *)(void *)p; 假设你的数组有N行M列的int型数据. int arr[N ...

  7. c语言把结构体首地址放入指针,C语言基础———指针,结构体指针,函数指针

    指针基础 一 指针就是地址,地址就是指针.指针存储的是内存的地址. 二 指针的定义 1.&表示取址运算符,&a 可以取到 a 在内存中的地址;打印地址的占位符为(%p),printf( ...

  8. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  9. C语言再学习 -- 再论数组和指针

    之前有总结指针数组,但是现在看来总结的太简单了.好多重要的知识点都是一带而过的.本想在后面添加后来想想算了,还是再写一篇文章来详细介绍数组和指针这对冤家吧. 之前总结的,参看:C语言再学习 -- 数组 ...

最新文章

  1. 一头扎进tomcat
  2. Eclipse调试常用技巧
  3. 代码chaid_[转载]经典决策树之SAS实现--CHAID
  4. vue --- 使用vue在html上显示当前时间
  5. BZOJ 3653: 谈笑风生(离线, 长链剖分, 后缀和)
  6. C语言 最大公约数和最小公倍数计算
  7. AngularJS.js: temple
  8. 西门子mag6000接线_电磁流量计MAG5000或MAG6000,通过脉冲输出累积流量,脉冲输出如何接线,如何设置参数?...
  9. 验证堆表(heap table)存储方式
  10. C语言/C++中strcpy_s函数
  11. C++ Concurrency in Action, 2nd Edition 免积分下载
  12. Oracle 卸载步骤详解
  13. 内网穿透端口映射工具
  14. apk+html启动页,案例——APP启动页
  15. 使用VB合并word文档内容
  16. Chrome浏览器获取Google搜索结果批量URL
  17. mac电脑循环次数多少算新_关于 MacBook 的电池问题,你了解多少
  18. Anaconda 安装及配置
  19. 22年春晚,一个让元宇宙照进现实的沉浸式演出舞台
  20. 一些对堕落中的人很有用的忠告

热门文章

  1. python四级是什么水平_大学过四级一般是什么水平?
  2. 我们真的误解了人工智能?
  3. python 小学生教材_事实上,自从Python编进小学生教材后......
  4. JavaScript基本属性方法
  5. 初学Python之爬虫学习
  6. 面对前端六年历史代码,如何接入并应用ES6解放开发效率
  7. 纯干货:教你如何注册WorldFirst的收款账号(送$25)
  8. C++-筛选文件夹中符合要求的文件并拷贝出来(以手机号码查找为例)
  9. 女孩应该偷偷知道一些事情
  10. 辽宁轨道交通职业学院计算机网络技术,辽宁理工类PK:辽宁轨道交通职院和辽宁省交通高专对比...