面试宝典之预处理、const与sizeof

#include <stdio.h>
#define SUB(x, y) x - y
#define ACCESS_BEFORE(element, offset, value) *SUB(&element, offset) =value

int main(void)
{
	int i; int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
	ACCESS_BEFORE(array[5], 4, 6);
	for (i = 0; i < 10; ++i){
		printf("%d ", array[i]);
	}

	return 0;
}


编译结果:




分析:

SUB(x, y) x - y

ACCESS_BEFORE(element, offset, value) *SUB(&element, offset) =value

ACCESS_BEFORE(array[5], 4, 6);->*SUB(&array[5], 4) =6 ->*&array[5] - 4 =6

*&array[5]的值为6,则减去4等于2,将6赋值给2,则肯定是错误的。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

#include <iostream>
#include <string>

using namespace std;

struct {
	short a1;
	short a2;
	short a3;
}A;

struct {
	long a1;
	short a2;
}B;

int main(void)
{
	char *ss1 = "0123456789";
//	int ss[100] = "0123456789";

	cout << sizeof(A) << endl;
	cout << sizeof(B) << endl;
	cout << sizeof(ss1) << endl;
//	cout << sizeof(ss) << endl;

	return 0;
}



假设去掉代码中的凝视,则编译结果为:



由此可见 int ss[100] = "0123456789"; 这个语句是不对的,所以对其求sizeof也是不对的。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


#include <stdio.h>

char var[10];
int test(char var[])
{
	return sizeof(var);
}

int main(void)
{
	printf("%d\n", test(var));
	return 0;
}


var退化为数组的指针,而非数组。



posted @ 2017-05-05 14:42  lytwajue  阅读(190)  评论(0编辑  收藏  举报