验证的代码:

 #include <stdio.h>
int main(){ char c = 'z';
int num = ('Z' << ) + (c << ) + ('A' << ) + 'a'; printf("'Z'=0x%x c=0x%x 'A'=0x%x 'a'=0x%x\n", 'Z', c, 'A', 'a');
printf("num=0x%x\n", num); printf("\nsizeof(int)=%d sizeof(char)=%d\n", sizeof(int), sizeof(char));
printf("\nsizeof(num)=%d sizeof(c)=%d\n", sizeof(num), sizeof(c)); void *pv = &num;
char *ch = (char *)pv;
printf("num\t地址0x%x\n", &num);
printf("%c\t地址0x%x\n", *ch, ch); ++ch;
printf("%c\t地址0x%x\n", *ch, ch); ++ch;
printf("%c\t地址0x%x\n", *ch, ch); ++ch;
printf("%c\t地址0x%x\n", *ch, ch);
return ;
}

运行结果:

1、通过运行结果,我通过位运算<<将字符'Z' 'z' 'A' 'a'的顺序拼接到整数变量num中,从打印的sizeof(num)=4个字节,sizeof(char)=1个字节,表示一个整形变量可以拼接4个字符。

2、为了能让char*指针能访问int变量的地址,我们先用void*指针pv直线整形num的地址,然后再将pv强制转换赋值给char*指针变量ch(合法的操作,因为void*能转换成别的指针类型)

3、查看地址,通过++ch指针,打印地址,(1)发现一个整形变量是由4块连续内存存储的,(2)每块内存大小是1个字节(地址是连续的),(3)整形的最高8在地址中是最后一块。

4、通过这个例子,可以很好的理解,为什么swap函数可以交易两个相同类型元素的值。

自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理的更多相关文章

  1. 请写一个php函数,可以接受任意数量的参数

    请写一个php函数,可以接受任意数量的参数 这是一道面试题.怎么写这个函数呢? function fun(......) { } ----------------------------------- ...

  2. 自己写一个strcmp函数(C++)

    题目说明: 写一个函数,实现两个字符串的比较.即自己写一个strcmp函数,函数原型为int strcmp( char * p1, char * p2); 设p1指向字符串s1,p2指向字符串s2.要 ...

  3. 写一个PHP函数,实现扫描并打印出指定目录下(含子目录)的所有jpg文件名

    写一个PHP函数,实现扫描并打印出指定目录下(含子目录)的所有jpg文件名 <?php $dir = "E:\照片\\";//打印文件夹中所有jpg文件 function p ...

  4. 函数bsxfun,两个数组间元素逐个计算的二值操作

    转自http://www.cnblogs.com/rong86/p/3559616.html 函数功能:两个数组间元素逐个计算的二值操作 使用方法:C=bsxfun(fun,A,B) 两个数组A合B间 ...

  5. 前端面试题:不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标,,怎么实现好?

    昨天,看这道题,脑子锈住了,就是没有思路,没看明白是什么意思?⊙﹏⊙|∣今天早上起床,想到需要思考一下这个问题. 当然,我没想明白为什么要这样做?(创建一个长度为100的数组,并且每个元素的值等于它的 ...

  6. 用swap函数交换两个整数

    #include<stdio.h> //头文件 main() //主函数 { void swap(int *p,int *q); //声明 int a,b; //定义两个整数 int *p ...

  7. JavaScript 自己写一个 replaceAll() 函数

    JavaScript 的  replace()  方法可以在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 但是,只输入字符串的话,仅替换第一个字符,当然也可以用正则表达式来进行 ...

  8. 依据ECMA规范,手写一个bind函数

    Function.prototype.bind 函数,参见ECMA规范地址 如题,这次来实现一个boundFunction函数,不挂载在Function.prototype上,而是一个单独声明的函数. ...

  9. 为LoadRunner写一个lr_save_float函数

    LoadRunner中有lr_save_int() 和lr_save_string() 函数,但是没有保存浮点数到变量的lr_save_float函数.<lr_save_float() func ...

随机推荐

  1. 云虚拟主机开源 DedeCMS 安装指南

    1. 获取主机 FTP 和 数据库 信息 1.1 FTP 信息 登录主机管理后台,在 站点信息 中获取到 FTP 和 数据库 的账号密码,连接地址. 如下图所示: 如果忘记密码,可以在这里进行 重置密 ...

  2. linux系统meminfo详解(待补充)

    ========================================================================================== MemTotal: ...

  3. 玩转AR,联想将在2017年推出第二款Tango AR手机

    今年6月份,联想与谷歌合作推出了全球首款消费级AR手机Phab2 Pro,并获得很大的关注.作为谷歌Project Tango的一部分,这款手机的最大亮点是它搭载了三颗后置摄像头和多个传感器,机身背面 ...

  4. [转] 前端中的MVC

    MVC是一种设计模式,它将应用划分为3个部分:数据(模型).展现层(视图)和用户交互(控制器).其中: M - MODEL(模型) V - VIEW(视图) C - CONTROLLER(控制器) 一 ...

  5. mysql数据去除重复及相关优化(转)

    由于mysql不支持同时对一张表进行操作,即子查询和要进行的操作不能是同一张表,因此需要通过临时表中专以下. 1.单字段重复 生成临时表,其中uid是需要去重的字段 create table tmp_ ...

  6. Android -- 使用图库文件并可以裁剪文件(ImageView)

    1. 本例子首先教大家如何打开图库 ,然后在使用裁剪功能,来裁剪图库里面的图片并进行显示工作

  7. BZOJ4562: [Haoi2016]食物链

    Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动关系,求其中的食物链条数. 物种的名称为从1到n编号 M条能量流动关系形如 a1 b1 a2 ...

  8. Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_The49DayPersonalFullscreenGiftModel", referenced from: objc-class-ref in The49DayPersonalRoomGiftModel.o ld: symbol(s) not found for a

    Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_The49DayPersonalFullscreenGiftModel&q ...

  9. 转OSGchina中,array老大的名词解释

    转OSGchina中,array老大的名词解释 转自:http://ydwcowboy.blog.163.com/blog/static/25849015200983518395/ osg:: Cle ...

  10. ECMAScript 6(ES6)有什么新东西

    你可能已经听说过ECMAScript 6,JavaScript的下一个版本,它有一些非常棒的新功能.这些功能略微复杂,在简单的脚本和复杂的应用中都可以使用.在这篇文章中,我们将挑选一些ES6的功能进行 ...