面试宝典之预处理、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退化为数组的指针,而非数组。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值