C语言基础入门48篇_35_指向同一个地址的指针的内涵(“(TYPE) 变量“实现强制转换、n = (int)m、指针作为存储地址的变量,有2个内涵:指向哪里和按照指针的类型进行数据解释)

1. C语言中的强制类型转换


C语言中运行将数据类型强制转换,使用: (TYPE) 变量

如下在当前的VS中看起来已经进行了默认的隐式转换,只保留了整数位,会有数据丢失的警告:

#include <stdio.h>

int main(int argc, char* argv[])
{
    int nValue = 0;
    double fltValue = 3.14;
    nValue = fltValue;
    return 0;
}

在这里插入图片描述
强制转换后结果:与编译器默认处理的结果一致

#include <stdio.h>

int main(int argc, char* argv[])
{
    int nValue = 0;
    double fltValue = 3.14;
    nValue = (int)fltValue;
    return 0;
}

在这里插入图片描述
指针也是类型,因此也支持强制转换。以下报错:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* p1 = NULL;
    short* p2 = NULL;

    p1 = p2;
    return 0;
}

在这里插入图片描述
强制转换后通过编译:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* p1 = NULL;
    short* p2 = NULL;

    p1 = (char*)p2;
    return 0;
}

在这里插入图片描述

2. 指向同一个地址的指针

如果有多个不同类型的指针都指向同一个地址,各自的意义又有什么区别呢?

#include <stdio.h>

int main(int argc, char* argv[])
{
    int nValue = 0x11111111;

    //利用强制转换定义指向同一数据的不同数据类型的指针
    char* p1 = (char*)&nValue;
    short* p2 = (short*)&nValue;
    int* p3 = (int*)&nValue;
    
    printf("%08X\r\n", *p1);
    printf("%08X\r\n", *p2);
    printf("%08X\r\n", *p3);
    return 0;
}

运行结果:都指向了同一个数据,但是打印出来的数据结果是不同的,这是为什么呢?
在这里插入图片描述
这是因为指针除了指向地址的作用,还有解释方式的作用,上面p1为char类型占1个字节,因此读取数据时只会读出2个;p2为short类型占2个字节,因此读取数据时只会读出4个;p3为int类型占4个字节,因此读取数据时只会读出8个。(%08x表示按照输出16进制值且占8位,不足部分左侧补0;1个字节8位,最大值为8位,一个16进制是4位,也就是一个字节2个16进制)

  1. 一个字节 = 8位(8个二进制位) 1Byte = 8bit;
  2. 一个十六进制 = 4个二进制位
  3. 一个字节 = 2个十六进制

2.1 指指针的两个内涵


指针作为存储地址的变量,其实有两个内涵:

  • 指向哪里
  • 解释方式(按照指针的类型进行数据解释)

3. 学习视频地址: 指向同一个地址的指针的内涵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月旧城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值