面试宝典之预处理、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;
}
编译结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdWNhbjIz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
分析:
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;
}
假设去掉代码中的凝视,则编译结果为:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdWNhbjIz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
由此可见 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退化为数组的指针,而非数组。
面试宝典之预处理、const与sizeof的更多相关文章
- 程序员面试宝典 笔记(第六章 预处理 const 和sizeof())
void main() { "; cout<< cout<< "; cout<< cout<<strlen(ss2)<< ...
- C语言经典面试题 与 C语言面试宝典
1 预处理 问题1:什么是预编译?何时需要预编译? 答: 预编译又称预处理,是整个编译过程最先做的工作,即程序执行前的一些预处理工作.主要处理#开头的指令.如拷贝#include包含的文件代码.替换# ...
- GEEK学习笔记— —程序猿面试宝典笔记(二)
所谓笔记,就是比較个人的东西,把个人认为有点意思的东西记录下来~~ 程序猿面试宝典笔记(一)基本概念 程序猿面试宝典笔记(二)预处理.const和sizeof 程序猿面试宝典笔记(三)auto_ptr ...
- GEEK学习笔记— —程序猿面试宝典笔记(三)
所谓笔记,就是比較个人的东西,把个人认为有点意思的东西记录下来~~ 程序猿面试宝典笔记(一)基本概念 程序猿面试宝典笔记(二)预处理.const和sizeof 程序猿面试宝典笔记(三)auto_ptr ...
- c语言面试宝典(经典,超详细)
c语言面试宝典(经典,超详细) 2018年08月25日 09:32:19 chengxuyuan997 阅读数:7799 摘自:https://blog.csdn.net/chengxuyuan9 ...
- C++面试宝典2011版
1.new.delete.malloc.free关系 delete会调用对象的析构函数,和new相应free仅仅会释放内存,new调用构造函数.malloc与free是C++/C语言的标准库函数,ne ...
- .NET工程师面试宝典
.Net工程师面试笔试宝典 传智播客.Net培训班内部资料 这套面试笔试宝典是传智播客在多年的教学和学生就业指导过程中积累下来的宝贵资料,大部分来自于学员从面试现场带过来的真实笔试面试题,覆盖了主流的 ...
- JAVA面试宝典分享
JAVA面试宝典分享 前言 面试题 Java面试题(上) Java面试题(中) Java面试题(下) 参考答案 其他补充内容: 项目经验 项目介绍 项目开发流程 项目管理 系统架构 第三方工具(插件) ...
- 【转】Java面试宝典2015版(绝对值得收藏超长版)(一)
(转自:http://mp.weixin.qq.com/s?__biz=MjM5MTM0NjQ2MQ==&mid=206619070&idx=1&sn=fcb21001d442 ...
随机推荐
- ofbiz数据库表结构设计(1)- PARTY
ofbiz的精华就在于其数据结构(表结构)的设计.数据结构的通用性也决定了ofbiz几乎可以适用任何企业应用.我们首先来看看PARTY相关的表结构设计. 在ofbiz中,PARTY是个抽象概念,它可以 ...
- 对/proc和/sys的一些理解
一切皆文件,设备(文件)可以通过读写来操作:/proc procfs:/sys sysfs: 个人的理解(不知对不对,感觉有些片面)/proc是内存中有关系统进程的实时信息:/sys是有关系统内核以及 ...
- mac 重置mysql root密码
1. 关闭mysql服务 sudo /usr/local/mysql/support-files/mysql.server stop 如果出现Starting mysqld daemon with d ...
- ++x和x++
#include <stdio.h> int main() { int a,b,c=1,d=1; a = c++; b = ++d; printf("%d\t%d\n" ...
- 在本地(自己电脑上)部署了tomcat服务器,真机测试遇到的问题
开始的时候自己就是给app搭建了一个小的框架,只有一个界面发送了网络请求,部署的tomcat,数据成功请求,得到了数据. 后来随着联网请求的增多,突然发现联网请求一直失败.自己dubug了最开始的第一 ...
- 手游LTV(用户终生价值)计算公式
在承接APP推广项目中,手游价值变现最直接,核心是获取更多的充值,其中LTV(Lifetime-Value生命周期价值)是一个重要参考指标,可以理解为玩家在其生命周期内对游戏的平均贡献值,为什么要计算 ...
- CSU 1779: 错误的算法【矩阵/模拟】
Description 有道题目是这样的: 输入一个 n 行 m 列网格,找一个格子,使得它所在的行和列中所有格子的数之和最大.如果答 案不唯一,输出任意解即可.比如,在下面的例子中,最优解是(1,3 ...
- atom 默认的换行符设置成LF
如何把atom 默认的换行符设置成LF Select File->Settings Select ‘Packages’ Under Core Packages->line-ending-s ...
- python 编程模型
数据模型(译) image.png 1 对象(object).类型(type)和值(value) python中所有的数据都是通过对象(object)或者对象之间的关系来表示 每个对象(objec ...
- UVA 10827 Maximum sum on a torus 最大矩阵和
题目链接:UVA - 10827 题意描述:给出一个n*n矩阵,把第一行和最后一行粘一起,把第一列和最后一列粘一起,形成一个环面,求出这个环面中最大的矩阵和. 算法分析:首先复制n*n这个矩阵,形成由 ...