一道C语言试题求讲解,十分感谢!!

下面这段程序运行的结果是:A
int a=0x4145;
char *p;
p=(char *)&a;
*p+=1;
printf(“%X” , *p);
A. 46 B. 42 C.4146 D.4245

p=(char *)&a; 这句话什么意思呢~ p指向的是什么? *p等于45为什么~ 一头雾水,望详细讲解,谢谢~~~

p=(char *)&a;将a的地址转换为字符指针,也就是原来放的整数0x4145现在当成字符串来解释,在内存里面0x4145是这样存放的,先在一个低字节里放0x45再在接下来的一个高字节里放0x41,Intel的CPU是小端字节处理器,也就是说如果一个对象需要超过一个字节的内存来存放,那么它的地址就是最低的那个字节的地址,0x4146的地址就是存放0x45那个单元的地址,p指向0x4145于是p实际就是0x45那一个单元的地址,*p就取出了0x45这个值。。。。明白了吧。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-04-04
int a=0x4145;
a 在内存占 4 个字节,Ox45存放在低字节,Ox41存放在高字节

char *p;
p 是一个指向单个字符的指针,这就决定了它的运算规则,指针运算符 * 也只取1个字节的值。

p=(char *)&a;
p 指向 a 的那块内存首地址,即指向Ox45

*p+=1;
p 指向的那个字节的值自增,即Ox45+1 = Ox46

printf(“%X” , *p);
以十六进制输出 p 指向的内存的值
第2个回答  2009-04-04
A
//欢迎在线讨论
#include<stdio.h>
int main(void)
{
int a=0x4145;
char *p;
p=(char *)&a; //指向char的指针,p指向0x45
*p+=1; //0x45+1
printf("%X", *p); //输出0x46
return 0;
}
第3个回答  2009-04-04
int a=0x4145;在内存中, 低位字节在前,高位字节在后,即0x45,0x41.
&在这做取址符.即获得a的地址.因为a 是整形是,而p是指向字符型,即从所指地址读一个字节,通过(char *)强制把整形的地址转化为字符型,
即p指向0x45,加1后成0x46
第4个回答  2009-04-04
我觉得答案应该是A吧,c的语法我忘的差不多了,不过*p是char型的,在内存中指向两个字节的数据,而a是int型的,是4个字节,第三句话应该是与a相与,1和0相与就是0,1和1相与不变,a是16进制,那么就保留最后的两位,即45,指针p再加1的话就是46,用排除法也可以做出来。
第5个回答  2009-04-04
答案不是A就是B

一个c语言问题,万分感谢
您好,很高兴能为您解决问题。这儿得跟您说一声了。宏有个特性:他在用的时候C语言会直接把宏的名称替换成宏对应的值。外面不会加括号。所以v = LENGTH * 20是这样的:v = WIDTH + 40 * 20,进一步替换就是这样的:v = 80 + 40 * 20,那么直接算出80+40*20的值即可:= 80 + 800 = ...

c语言编程题求解,感谢!(再讲一下解题思路)
一圈一圈递归。先把最外层一圈的各个坐标与对应数字的关系确定:x=0;y=0;x=n-1;y=n-1时对应的坐标关系。x,y为坐标,lt为每圈左上角的数字(起始),n为阶数。然后递归计算就是了。#include <stdio.h>int get(int x, int y, int lt, int n){ if(x == 0) return lt+y; ...

一道C语言问题,请详细说明一下运算过程,万分感谢。
大致的功能是将a[]的内容反向输出,4,3,2,1. 难理解的是static int t = 3; 这个变量只初始化一次,因为是静态变量所以数据在堆区,当fun结束后不会被释放,下次继续可以使用这个变量,且值是上次使用后的,当j=0时,t=3,*y=x[3];当j=1时,t=2,*y=x[2];以此类推,当然fun的传参...

谁能提供点C语言的试题给我,最好能有答案的,非常感谢!
以下是一些 C 语言的试题,每个试题都附带有答案。希望能够帮助到你。1、编写一个程序,从命令行参数中读取两个整数,计算它们的和并输出结果。答案:include <stdio.h> int main(int argc, char *argv[]) {if (argc != 3) {printf("Usage: %s <int1> <int2>\\n", argv[0]);return 1...

C语言程序设计,求答案。万分感谢!
printf("%c\\n",char(c+32));else printf("what you input is not a letter! ");return 0;} 第二题的:include<stdio.h> int main(){ int x,y;printf("Please input your number x:\\n");scanf("%d",&x);if(x>-1)y=2*x;else if(x<-1)y=4+x;else y=3;printf("%d"...

求救一道C语言的题目,求详细解答过程!非常感谢!!
1.int i;int f[20]={1,1};程序定义了一个变量i和一个长度为20的整型一维数组并把数组的前两个值均初始化为1后面初始化为0 2.for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1];在i从2到20每次自增1的循环过程中,其实就是在给数组第3个数(数组下标从0开始,所以循环从2开始)到第...

C语言题要求详细解释,谢谢
首先要明确p1p2都是指针变量,它们的值都是一个地址,所以地址*地址、地址\/地址、地址+地址,还有地址与常数的乘除运算都是毫无意义的,所以A、C选项是错误的表达。最后一个(D)把指针p2的地址赋值给p1,这也是不允许的,除非p2先定义为二级指针才可以,否则,只能把一个普通变量的地址赋值给它。

这个C语言题咋做..求大神讲解一下原理
y*3=2.5*3=7.5 (int)y,将y强制转换为整型,y=2,y%5=2%4=2 7.5+2=9.5 (float),将结果转换为浮点型,结果为9.5 虽然等式右边是浮点型数,但是x定义为整型,因此x=9 x的值是9,选B

C语言作业求助,十分感谢
C代码和运行结果如下:输如10个数,成功输出了它们的最大值、最小值和平均值,望采纳~附源码:include <stdio.h> int main() { int max, min, sum, num, i;scanf("%d", &num); \/\/ 先输入一1个数 max = min = sum = num;for (i = 0; i < 9; i++) { \/\/ 再输入剩下9...

求教C语言大神!!!最好讲一下理由,万分感谢
原因如下:首先,主函数只进行了一个fun操作,其他的就是定义和输出,所以字符串(或者说字符数组)的调整完全由fun决定 fun中首先定义了x和y,因为s的长度是5,所以y = (strlen(s) - 1) \/ 2=(5-1)\/2=2 因此:循环开始时,初始值是x=0,y=2,s="abcde",进入循环 第一次:0<2成立,...

相似回答