zoukankan      html  css  js  c++  java
  • 自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理

    验证的代码:

     1 #include <stdio.h>
     2 int main(){
     3     
     4     char c = 'z';
     5     int num = ('Z' << 24) + (c << 16) + ('A' << 8) + 'a';
     6 
     7     printf("'Z'=0x%x c=0x%x 'A'=0x%x 'a'=0x%x
    ", 'Z', c, 'A', 'a');
     8     printf("num=0x%x
    ", num);
     9 
    10     printf("
    sizeof(int)=%d sizeof(char)=%d
    ", sizeof(int), sizeof(char));
    11     printf("
    sizeof(num)=%d sizeof(c)=%d
    ", sizeof(num), sizeof(c));
    12 
    13     void *pv = &num;
    14     char *ch = (char *)pv;
    15     printf("num	地址0x%x
    ", &num);
    16     printf("%c	地址0x%x
    ", *ch, ch); ++ch;
    17     printf("%c	地址0x%x
    ", *ch, ch); ++ch;
    18     printf("%c	地址0x%x
    ", *ch, ch); ++ch;
    19     printf("%c	地址0x%x
    ", *ch, ch);
    20     return 0;
    21 }

    运行结果:

    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函数可以交易两个相同类型元素的值。

  • 相关阅读:
    URAL 2067 Friends and Berries (推理,数学)
    URAL 2070 Interesting Numbers (找规律)
    URAL 2073 Log Files (模拟)
    URAL 2069 Hard Rock (最短路)
    URAL 2068 Game of Nuts (博弈)
    URAL 2066 Simple Expression (水题,暴力)
    URAL 2065 Different Sums (找规律)
    UVa 1640 The Counting Problem (数学,区间计数)
    UVa 1630 Folding (区间DP)
    UVa 1629 Cake slicing (记忆化搜索)
  • 原文地址:https://www.cnblogs.com/xuqiulin/p/5550823.html
Copyright © 2011-2022 走看看