'abc'的值是多少?

看见一个贴子,发贴人搞不清输出结果中的“为什么”(见http://bbs.csdn.net/topics/390623518)。给出的程序是:

#include <stdio.h>

int main(void)
{
	/* 将单个字符赋值给整形变量,结果为字符的ASCII值 */
	int   a = 'a';
	printf("a = %d\n", a);

	/* ?这里如何解释 */
	a = 'abc';
	printf("a = %d\n", a);

	/* 将字符串赋值给整形变量,结果为字符串的地址值 */
	a = "a";
	printf("a = %d\n", a);

	a = "abc";
	printf("a = %d\n", a);
	return 0;
}

  'abc'这样的写法,我也是第一次见到,居然编译器只给一个警告。
  程序的运行结果是:
  
  第二行的结果,即a = 'abc';后a的值显得诡异,跟贴中,大家纷纷猜测。
  我对这种情况也不清楚,这时想到的是,要将整型数a中的4个字节中每个字节的值能分隔出来,应该就一目了然了,最好将每个字节解释成一个之字符直接输出来看。

  想到了“联合体”union,将程序改造了一下,得到下面的程序:

#include <stdio.h>
union un
{
	int i;
	char c[4];
};
int main(void)
{
	/* 将单个字符赋值给整形变量,结果为字符的ASCII值 */
	int   a = 'a';
    union un b;
	printf("a = %d\n", a);
	/* 这里的b.i就相当于原来的a,而b.c数组与b.i占用同一段4字节的空间 */
	b.i = 'abc';
	printf("b.i = %d\n", b.i);
	printf("b.c = %c %c %c %c\n", b.c[0], b.c[1],b.c[2],b.c[3]);

	/* 将字符串赋值给整形变量,结果为字符串的地址值 */
	a = "a";
	printf("a = %d\n", a);

	a = "abc";
	printf("a = %d\n", a);
	return 0;
}

  运行结果是:
  

  结果不解释了,原理应该在“计算机组成原理”或“计算机体系结构”中介绍,学过汇编语言的人也明白。程序员学软件,要对计算机系统有理解,这是专业人员该关注的。

  C/C++中的union,似乎在教学中都是一带而过,感兴趣的同学,再找其他资料了解了解即可。

时间: 2024-10-26 23:01:50

&#39;abc&#39;的值是多少?的相关文章

javascript-jquery如何设置一个动态创建的 $(&amp;amp;#39;#&amp;amp;#39;).append(&amp;amp;#39;&amp;amp;#39;)中的ID?并利用它

问题描述 jquery如何设置一个动态创建的 $('#').append('')中的ID?并利用它 就比如像这样的: <script type="text/javascript"> var number=0; function next(){ $('#showdata').append('<input class="number_showdata" id="showdataid'+number+'" type="tex

“39健康网”到底值不值6.5亿

朗玛信息(300288.SZ)将自己的版图扩展到移动健康服务领域,拟以6.5亿元收购启生信息100%的股权,从而获得其旗下39健康网,后者是中国医疗健康垂直领域知名网站. 朗玛信息看中39健康网什么? 朗玛信息董事长王伟接受<第一财经日报>记者采访时表示,其重视的是39健康网的用户数据,并由此获得的移动医疗大数据入口. 寻找大数据入口 用户.数据以及医疗服务是医疗健康大数据服务中关键三要素. 39健康网是一家提供健康资讯.基础数据工具.在线咨询的医疗垂直网站,其在线广告在收入中占比72%,电信

异构编程-php中字符变量 异或 &amp;amp;#39;1&amp;amp;#39;^&amp;amp;#39;2&amp;amp;#39; 的值

问题描述 php中字符变量 异或 '1'^'2' 的值 php中字符变量 异或 $a = '1'^'2' 的值 ? 在c语言中 值为3 在php执行后 var_dump($a)后发现是string """"类型 ,其实应该是有值的,请问下,运行的结果到底是什么 解决方案 '1'=0x31'2'=0x32 '1'^'2' =0x31^0x32=0x03 解决方案二: 先转成二进制,然后再执行. 解决方案三: 你把这字符串类型转成Int试一下

linux-使用 echo &amp;amp;#39;abc&amp;amp;#39; |frank= 为什么echo $frank不能输出&amp;amp;#39;abc&amp;amp;#39;

问题描述 使用 echo 'abc' |frank= 为什么echo $frank不能输出'abc' 使用 echo 'abc' |frank= 为什么echo $frank不能输出'abc' 解决方案 你可以这样写 frank=`echo "test"` echo $frank 解决方案二: 因为|是开启了子线程,echo $frank是父线程中不能访问子线程的变量 echo 'abc' | while read frank;do echo $frank;done

ERROR 1045 (28000): Access denied for user &amp;#39;root&amp;#39;@&amp;#39;localhost&amp;#39; (using password: YES)

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) root@mysql ~]# mysql -p -u root Enter password:  ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) ERROR 1045 (28000): Access denied

Unknown column &amp;#39;*&amp;#39; in &amp;#39;field list&amp;#39; 异常解决

在使用Hibernate做持久化的时候,为实体类定义一个与数据表无关的属性. 出现异常如下: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'user0_.authority' in 'field list' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.Native

ajax-关于callback(eval(&amp;amp;#39;(&amp;amp;#39;+xhr.responseText+&amp;amp;#39;)&amp;amp;#39;));IE报错的问题

问题描述 关于callback(eval('('+xhr.responseText+')'));IE报错的问题 //这是index.js的文件 (function() { var li = function(id) { return document.getElementById(id); }; li.init = function() {// li下的init方法 // 创建一个ajax对象并返回 try { return new XMLHttpRequest(); } catch (e) {

[java] javax.el.PropertyNotFoundException: Property &amp;#39;id&amp;#39; not found on type bean.Student

问题提出: 在使用MyEclipse开发Java Web时,调用DAO和Java Bean出现了如下错误: 严重: Servlet.service() for servlet [jsp] in context with path [/JDBCbyDao] threw exception [An exception occurred processing JSP page /student.jsp at line 3734: 35: <c:forEach items="${ studentL

Error using subsindex Function &amp;#39;subsindex&amp;#39; is not defined for values of class &amp;#39;struct&amp;#39;.

1 clc; clear all; close all; 2 image_path = '/media/wangxiao/Elements/image_segment_backup/'; 3 savePath = '/media/wangxiao/Seagate/wangxiao/additional_data/'; 4 5 threshold = 5000; 6 7 first_files = dir(image_path); 8 9 for i = 3:length(first_files)