验证的代码:

 #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. BlockingQueue深入分析(转)

    1.BlockingQueue定义的常用方法如下   抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offer(e,time,unit) 移除 remove() p ...

  2. Linux 查杀病毒的常见命令

    1. 查看异常连接的网络端口及其对应的相应的进程 netstat -anlp | grep EST 2.看下相关的进程ID对应的可执行文件的位置 ps 2393 可以看到进程的可执行文件在哪? 3.临 ...

  3. 自动提交Git branch代码评审到Review Board系统

    背景 敏捷软件开发中,越小的反馈环,意味着软件质量越容易得到保证. 作为组件团队,我们的开发任务中,往往存在一些特性涉及到几十个功能点,开发周期持续数周或数月的情况.如何在开发过程中保证软件质量,是个 ...

  4. MVC 缓存实践(一)

    为什么要讲缓存.缓存到底有什么作用? 下面我们来说一个场景我们有一个首页菜单的布局基本是不会经常发生的变化,如果动态生成的 Web 页被频繁请求并且构建时需要耗用大量的系统资源,那么,如何才能改进这种 ...

  5. Updating My Notepad_1.1

    The old version Notepad 1.0 you can get it from below link : My Notepad I am very happy to announce ...

  6. PHP伪静态

    伪静态 从形式上看是一个静态地址,实际上还是访问的动态地址, 比如:访问:http://www.abc.com/news-sport-id123.html 实际上是:http://www.abc.co ...

  7. mysql基本语法

    MySql一些基本语法      3.3.5 直接在数据库目录中创建或删除 用上述方法创建数据库,只是MySQL数据目录下面创建一个与数据库同名目录,同样删除数据库是把这个目录删除. 所以,你可以直接 ...

  8. 跳转到下一个activity

    /* * 第一个跳转代码 */ button.setOnClickListener(new OnClickListener() { @Override public void onClick(View ...

  9. mysql 主主互备

    双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换到 ...

  10. A Taxonomy of Parallel Processor Architectures

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION