首页 > 其他分享 >当char型变量遇上char*型的指针

当char型变量遇上char*型的指针

时间:2024-06-18 15:26:20浏览次数:18  
标签:0x11 char printf 0x1111 指针 遇上 size

#include <stdio.h>

int main(void)
{
	char* i = (char*)0x1111;
	printf("size = %d %d\n", sizeof(i), sizeof((char*)0x11));
     //  size i = 8 bytes, size(char*)0x11 = 8bytes, cause 0x11 is convered to char*, char* is a poninter and has 64 bits in x64 system

	printf("value = %p %p\n\n", i, (char*)0x1111); // pointer i = 0000000000001111, pointer(char*)0x11 = 0000000000001111
    

	printf("---------------------------------------------------------------\n");

	char* j = (char)0x1111;
	printf("size = %d %d \n", sizeof(j), sizeof((char)0x11)); //  size j = 8bytes, size(char)0x11) = 1 bytes
    // char is 8 bits
	printf("value = %p %p \n", j, (char)0x1111); // value = 0000000000000011 0000000000000011
    // (char)0x1111 is cut off when it is over 8 bits, so when char* j = (char)0x1111, the pointer of j is 0000000000000011

	return 0;
}

结论:

  • char型变量有8bits,char*型指针变量有64bits(在x64系统下),将一个char类型的变量赋值给指针,那么该指针指向的地址只有0~255种可能,这是不应该的

  • 正确写法应该是char类型指针对应char类型指针,即: char i = (char)0x0000000000001111; 这样64位对应64位,指针i就能正常寻址,而不是只能访问部分地址

    注:char i表示 -> 指针i的类型是char,其指向数据类型为char的变量(存放char类型变量的地址)

标签:0x11,char,printf,0x1111,指针,遇上,size
From: https://www.cnblogs.com/archerqvq/p/18254412

相关文章

  • The Charm and Influence of Mathematics
    RespectedTeachersandDearClassmates:Helloeveryone!Today,thetwoofuswilljoinhandstoleadeveryoneinexploringanancientandinfinitelycharming(令人着迷的;可爱的)field-mathematics.Mathematics,thispreciseandwonderfullanguage,notonly......
  • LiveCharts2:简单灵活交互式且功能强大的.NET图表库
    前言之前的文章中提到过ScottPlot、与oxyplot,这两个是比较常用的.NET图表库,今天介绍一款新的.NET图表库:LiveCharts2。LiveCharts2介绍LiveCharts2是一个现代化的数据可视化库,用于创建动态和交互式图表,支持.NET平台。它是LiveCharts的进化版,旨在提供更高性能、更灵活和更易......
  • char 型变量中能不能存贮一个中文汉字?为什么?
    在Java中,char类型变量可以存储一个中文汉字,这是因为char类型使用Unicode编码,而Unicode编码字符集包括了大量的汉字。详细解释如下:Unicode和Java中的char类型Unicode编码:Unicode是一种字符编码标准,目的是为世界上所有的文字和符号提供唯一的编码。它包含了......
  • C语言---------深入理解指针
    目录一、字符指针二、指针数组:三、数组指针:1、定义:2、&数组名和数组名区别:3、数组指针的使用:四、数组参数,指针参数:1、一维数组传参:2、二维数组传参:3、一级指针传参:4、二级指针传参:五、函数指针:1、定义:2、函数名和&函数名:3、函数指针的调用:六、函数指针数组:七......
  • C++11智能指针 unique_ptr、shared_ptr、weak_ptr与定制删除器
    目录智能指针场景引入-为什么需要智能指针?内存泄漏什么是内存泄漏内存泄漏的危害内存泄漏分类如何避免内存泄漏智能指针的使用及原理RAII简易例程智能指针的原理智能指针的拷贝问题智能指针的发展历史std::auto_ptr模拟实现auto_ptr例程:这种方案存在的问题:Boost库中的智能指针......
  • pycharm中Allure的安装及其环境配置
    目录一、安装Allure二、配置环境三、借助Allure生成美观又方面的测试报告注:Windows系统,在pycharm中安装Allure,Allure是由Java语⾔开发的⼀个轻量级,灵活的测试报告⼯具。在安装Allure之前请确保电脑已安装JDK。         Allure是一种灵活的轻量级多语言测试......
  • C语言指针
    文章目录内存和地址内存地址指针变量和地址取地址操作符`&`指针变量和解引用操作符`*`指针变量如何拆解指针类型解引用操作符指针变量的大小指针变量类型的意义指针的解引用指针+-整数`void*`指针`const`修饰指针`const`修饰变量`const`修饰指针变量指针运算指针......
  • 手把手教你安装Pycharm,详细安装教程!
    PyCharm:可以去PyCharm官网:https://www.jetbrains.com下载对应机器的安装包。安装包下载第一步:进入PyCharm官网,点击Tools,如下图所示:第二步:点击“PyCharm”,进入安装包现在页面,如下图所示:第三步:点击“DOWNLOADNOW”,根据自己需要下载匹配的操作系统的安装包,如下图所示:......
  • pycharm切换conda环境
    打开设置选择项目:***-python解释器-添加解释器-添加本地解释器选择conda环境-使用现有环境-选择需要环境的路径(也可以创建新的conda环境:设置环境名和python版本)......
  • 【PL理论】(29) OOP:面向对象编程 | 案例研究:C++ 中的类 | 继承 | 继承和指针 | Object
    ......