c语言指针指向地址的问题 求大神详细解答

问题描述

c语言指针指向地址的问题 求大神详细解答
#include
int main(int argc char const *argv[])
{

int  b=0x12345678;char *p4=(char *)&b;printf(""p=0x%hhxn""*p4 );printf(""p=0x%hhxn""*(p4+1) );char *p7=""helloworld"";printf(""%cn""*p7 );return 0;

}

为什么*p4打印的结果是ox78而*p7的结果是'h'而不是'd'?

解决方案

求大神给一下详细的解答和原理

解决方案二:
这个地方涉及到处理器大小端的问题,一般电脑都是小端的,也就是说高位保存到内存高地址,低位保存到低地址,此处*p4强制转换为char型,所以只取低字节,因为b在内存中保存方式自高字节到低字节依次保存到内存的高地址到低地址,所以此处的*(p4+1)则是56,依次类推*(p4+2)为34,*(p4+3)为12,
*p7此处定义的字符串,则p7代表该字符串的首地址,此处只打印一个字节,所以打印的是字符串的首字母

解决方案三:
你Debug下看到memory看一下内存布局,看看你的int b的数据是怎么存放的。

解决方案四:
你要记住两点,弄清楚一点。记住两点,第一点是字符串采用大端模式存储,第二点是指针始终指向变量的低地址,不是最地位。弄清楚一点是什么是大端存储,什么是小端存储。计算机一般采用小端模式存储非字符串变量。

解决方案五:
我也认为是机器的大端小端问题。

时间: 2025-01-26 04:28:00

c语言指针指向地址的问题 求大神详细解答的相关文章

c语言-关于C语言结构体指针类型的强制转换(求大神详细解答)

问题描述 关于C语言结构体指针类型的强制转换(求大神详细解答) #include <iostream> #include <algorithm> using namespace std; typedef struct { string dna; int count; }DNA; DNA dna[101]; **int cmp(const void *a,const void *b) { DNA *aa = (DNA *)a; DNA *bb = (DNA *)b; return a

windows-win10系统,cmd默认的地址更改,求大神!!

问题描述 win10系统,cmd默认的地址更改,求大神!! win10系统,cmd打开后的默认地址C:UsersAdministrator,想改成C:windowssystem32 win10系统没有本地用户和组!!!! 解决方案 可以建一个cmd的快捷方式,然后右键点击快捷方式查询属性,在属性框里修改起始位置的地址即可.

c语言取小数问题,急求大神解答!

问题描述 c语言取小数问题,急求大神解答! 程序是#include int main() { float a,b; int n; scanf("%f",&a); n=(1000*a+0.5); b=(n*1.0)/1000; printf("%f",b); return 0; } 输入123.4567 输出是123.457001 输入1234.567 输出时1234.567017 输入12345.67 输出是12345.669922 为什么会这样呢?求大神解

投票系统-如何实现一台电脑一天只能投票一次,即使更换了路由器IP地址??求大神指教。。

问题描述 如何实现一台电脑一天只能投票一次,即使更换了路由器IP地址??求大神指教.. 这两天打算做一个投票的页面. 想实现一台电脑或者手机一天只能投票一次,即使更换了路由器IP地址. 准备从mac地址下手,后来发现MAC地址的获取很麻烦,而且IE会提示安装插件.. 后来想起来去年一个朋友找我拉票的网站,就是实现了类似的功能,支持PC和手机端的一天只能投一票的功能.再去找的时候投票已经关闭了.. 我想问下各位大神,这个功能到底是如何实现的?.. 解决方案 直接绑定帐户好了,需要帐户登陆才能投票,

acm-一道ACM的题求大神们解答,C语言,谢谢!

问题描述 一道ACM的题求大神们解答,C语言,谢谢! [题目描述] FFF团成员自带这样一个属性:凭空变出火把与汽油,两者配合起来才能让FFF之火duang的一下烧起来,但是不同的火把与不同的汽油配合产生的火焰是不同的,现在有n种火把与n种汽油,已知每一种火把与每一种汽油配合时产生的火焰的旺盛程度,现在求怎样使得火把与汽油一一配对,产生最旺盛的火焰. [输入] 第一行为一个整数T,表示有T组数据 每组数据第一行为一个正整数n(2≤n≤30) 第二行开始一共有n行,每行为n个正整数,第i行第j个数

c语言-C语言的一个小问题,求大神

问题描述 C语言的一个小问题,求大神 #include int main() { float c,f; scanf("%f",&f); c=(5.0/9)*(f-32); printf("摄氏度为%fn",c); return 0; } 语句c=(5.0/9)*(f-32); 中的5.0换成5的话输出结果就错了,这是为什么呀,求大神指点 解决方案 如果除数是5的话,那么/就是整除的意思. 你也可以写成 5f,让它被视作是float 解决方案二: 5/9 取整

c语言- 有限域?GF(2^8)本原多项式及有限域元素生成表的算法(C语言算法实现,MATLAB验证) 求大神、求大神, ??

问题描述 有限域?GF(2^8)本原多项式及有限域元素生成表的算法(C语言算法实现,MATLAB验证) 求大神.求大神, ?? 有限域?GF(2^8)本原多项式及有限域元素生成表的算法(C语言算法实现,MATLAB验证) 求大神.求大神, ??

c语言-C语言中的函数问题,求大神教我怎么完成。。。。

问题描述 C语言中的函数问题,求大神教我怎么完成.... C语言中的函数问题,求大神教我怎么完成................ 解决方案 #include <stdio.h> int add(int a, int b) // 定义函数 { return a + b; } int main() { int x = 1, y = 2; int r = add(x, y); // 调用函数 printf("%dn", r); } 解决方案二: printf("...&

C语言--折半法的问题,求大神指点

问题描述 C语言--折半法的问题,求大神指点 对于某公司的职工进行工资排序,且用折半法找到指定的职工 #include<string.h> #define M 3 void inputName(char name[][121],double money[]); void ouput(char name[][121],double money[]); void sortPay(char name[][121],double money[]); void sortName(char name[][