简单的C语言有关问题,望高手指教
简单的C语言问题,望高手指教!
请先看代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
unsigned int a=0xFFFFFFF7;
unsigned int i=(unsigned char)a;
char *b=(char *)a;
printf("%0x,%0x\n",i,*b);
printf("sizeof(i)=%x,sizeof(*b)=%x\n",sizeof(i),sizeof(*b));
system("pause");
return 0;
}
这个代码出现错误!如图:
后来看书上,将我代码中的 char *b=(char *)a;改成 char *b=(char *)&a;这样就正确了!!!
问:
1、这是为什么呢?
2、能分别解释下这两条代码么?
3、能具体解释下这两条代码的不同么?
------解决方案--------------------
char *b=(char *)a;与char *b=(char *)&a;完全不同!!
char *b=(char *)a;将a的值强制转换为 char *类型,即将整形转为指针类型。
char *b=(char *)&a;将a的地址值强制转换为char*类型。
你的程序出错,是你指定了一个地址0xFFFFFFF7,然后在此地址里进行一些读写操作,但是0xFFFFFFF7可能存放一些重要数据,就会造成访问冲突。。地址值应该是系统自动分配的,而不是你这样指定的
------解决方案--------------------
char *b=(char *)a a和b的类型不同,并且a是一个变量,不是一个指针,指针代表的是一个地址。所以,先将a转换为一个地址:&a,然后在转换类型:(char *)&a;
请先看代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
unsigned int a=0xFFFFFFF7;
unsigned int i=(unsigned char)a;
char *b=(char *)a;
printf("%0x,%0x\n",i,*b);
printf("sizeof(i)=%x,sizeof(*b)=%x\n",sizeof(i),sizeof(*b));
system("pause");
return 0;
}
这个代码出现错误!如图:
后来看书上,将我代码中的 char *b=(char *)a;改成 char *b=(char *)&a;这样就正确了!!!
问:
1、这是为什么呢?
2、能分别解释下这两条代码么?
3、能具体解释下这两条代码的不同么?
------解决方案--------------------
char *b=(char *)a;与char *b=(char *)&a;完全不同!!
char *b=(char *)a;将a的值强制转换为 char *类型,即将整形转为指针类型。
char *b=(char *)&a;将a的地址值强制转换为char*类型。
你的程序出错,是你指定了一个地址0xFFFFFFF7,然后在此地址里进行一些读写操作,但是0xFFFFFFF7可能存放一些重要数据,就会造成访问冲突。。地址值应该是系统自动分配的,而不是你这样指定的
------解决方案--------------------
char *b=(char *)a a和b的类型不同,并且a是一个变量,不是一个指针,指针代表的是一个地址。所以,先将a转换为一个地址:&a,然后在转换类型:(char *)&a;