Code Bye

一个控制台程序的疑惑,是哪里作怪

	bool a[] = {1,0,1, 1,0,0, 0,1,1, 1};
	int i1 = sizeof(a);
	bool b[10];
	memcpy(b,a,10);
	int sss[100];
	bool b1[4];
	bool b2[12];
	bool b3 = false;

	int h1 = sizeof(b1);
	int i = sizeof(a);
	int h2 = sizeof(b2);
	int h3 = sizeof(b3);
	int k = sizeof(sss);
	int qq0 = sizeof(a);

问题说明:WIN7 x64 +vs2010 控制台下测试一下memcpy拷贝一个bool数组,memcpy用的少,不熟悉;结束后还执行一下sizeof(a),看看bool到底是不是int,占几个字节,结果是

int i = sizeof(a);

返回的是9!而且

int qq0 = sizeof(a);

又正常了。
少见早就多怪,求帮助方家指导,解释,谢谢

解决方案

5

假如要测试bool是几个字节,那memcpy这里写成:memcpy(b,a,10*sizeof(bool));  否则你已经默认他是1了

50

引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:

假如要测试bool是几个字节,那memcpy这里写成:memcpy(b,a,10*sizeof(bool));  否则你已经默认他是1了

假如是单独写代码确实应该这么写,本人是之前测试过sizeof(bool)返回1,所以这么写,而且拷贝是成功的。
关键是 那个sizeof(a)返回9,而实际上a[]是10个元素。

本人在本人机上测试两处返回的都是10


不知道反 汇编看错没有 反正反汇编 感觉也应该是10,不过显示的的确是9

0Ah就是十进制下的10
至于你图中的i,你要把断点打在那条语句的下一句才有说服力

10

引用:
Quote: 引用:

这个在赵4老师的公开课里面讲过。

明天学习赵4老师的公开课

在单步调试或设断点调试时,要注意黄色箭头指向的语句或指令是将要执行的语句或指令,而非已经执行过的语句或指令。
http://edu.csdn.net/course/detail/2344


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明一个控制台程序的疑惑,是哪里作怪