关于c语言中的定义int类型的常量

int a = 0x12345678

int可以单独这样定义吗?

int a =0x12345678;
char b;

b = (((unsigned char *)&(a))[0]); // 另外麻烦帮我解释下这句的意思和关系。

可以这样定义 但行尾必须加分号。

不过你这样定义的是变量 并不是常量

要定义常量可以写为

const int a = 0x12345678;

或者直接用宏定义

#define CONST_A 0x12345678

PS:宏定义时无需加分号



int a =0x12345678;//定义一个变量a å¹¶èµ‹å€¼ä¸º0x12345678. è¿™æ—¶ä¼šç»™a分配一个sizeof(int)的空间,一般为4
    char b;  //定义字符变量b     
                  
    b = (((unsigned char *)&(a))[0]);
    //这个需要分几步来理解
    //&(a)取a的地址
    //((unsigned char *)&(a)) æŠŠå®ƒè½¬æ¢æˆæ— ç¬¦å·å­—符型指针
    //这个指针是指向a的首地址的 æ‰€ä»¥ è¿™ä¸ªæ— ç¬¦å·å­—符型指针指向的区域就有和a同样的值
    //即四个字节,分别为0x12 0x34 0x56 0x78
    //((unsigned char *)&(a))[0] å–第一个值 å³0x12
    //所以最终b的值为0x12
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-20
可以,这是给a赋一个十六进制的值。
第二句要这么分析,先看括号里的
那么就是将a取其地址后强制转换成无符号char指针,然后把这个指针指向的地址的第一个char值赋给b。
也就是假如a占四个字节,b取它的第一个字节的值
第2个回答  2014-12-20
可以这样定义

int a =0x12345678;表示a的值为十六进制的12345678

b = (((unsigned char *)&(a))[0]);

将a的内存地址指针转换为unsigned char *,并取第0号元素值
第3个回答  2014-12-20
可以 0x代表16进制,但是你写的0x12345678超过了int大小范围,必须改小才能正常使用。

b = (((unsigned char *)&(a))[0]);
unsigned char*是无符号字符指针型,在这里对把数组a用&取地址,强制转换成了unsigned char*,然后对它进行取第一个数,就相当于取出a数组第一个数通过ascii码转换成字符保存在b中,
例如
int a[2]={65,68};
char b;
b = (((unsigned char *)&(a))[0]);
printf("%c",b);
输出就会是A,因为65是A的ascii码
第4个回答  推荐于2017-10-07
1、定义常量可以写为
const int a = 0x12345678;
或者直接用宏定义
#define CONST_A 0x12345678
2、常量整体上分两类,一类是整型常量,一类是浮点型常量。细致上分,整型常量还包括字符常量、字符串常量。
①. 整型常量 如6,27,-299
②. 浮点型常量 如5.43,-2.3,5.43F(单精度)、2.3f(小写的f也可以)
③. 字符常量 如‘6’,‘a’,L'中'(宽字符常量)
④. 字符串常量 如“6”,“男”,“nanabc”
相似回答