• 指针专题1-指针变量


    1 内存大小

    1K Byte

    0x00-->0X400

    0-->210=1024

    2K Byte

    0x00-->0X800

    0-->212=2048

    4K Byte

    0x00-->0X1000

    0-->212=4096

    1M Byte

    0x00-->0X10 0000

    0-->220

    2M Byte

    0x00-->0X20 0000

    0-->221

    4M Byte

    0x00-->0X40 0000

    0-->222

    1G Byte

    0x00-->0X4000 0000

    0-230

    2G Byte

    0x00-->0X8000 0000

    0-->231

    4G Byte

    0x00-->0X1 0000 0000

    0-->232

    2 地址与内容

     char *p_char:内存中每个位置可以存储1个字节,每个位置8位,可以表示无符号0~255,或者有符号-128~127

    char *p_int:内存中每个位置可以存储4个字节,每个位置32位,可以表示无符号0~232-1,或者有符号-231~231-1

    3 指针变量的定义

    方法1:先定义,再赋值

    float a=99.5;
    float *p_a;  //定义指针变量
    p_a = &a;   //指针变量赋值 p_a指向变量a的地址
    
    printf("p_a = %#x
    ", p_a);
    printf("a = %f
    ",a);

    输出:

      p_a = 0x62fe98
      a = 99.500000

    方法2:定义的同时赋值

    float a=99.5;
    float *p_a = &a;  //定义指针变量指向a的地址
    表达式 右值 类型
    a 99.5 float
    p_a 0x62fe98 float *
    *p_a 99.5 float

     4 修改指针变量

    p_a = &b;  //修改指针变量指向变量b的地址

    5 修改内存上的数据

    int a=15, b=99;
    int *p=&a;    //定义指针p,并让p指向a的地址
    *p=b;    //通过指针变量修改a的地址上的数据,等于变量b的值
    printf("%d,%d,%d",a,b,*p);

    输出:

      99,99,99

    6 指针表达式

    char ch[2]={'a','A'};
    char *cp=&ch;
    printf("%#x
    ",cp);        //0x62fe98
    printf("%c
    ",*cp+1);    //'b'
    printf("%c
    ",*(cp+1));    //'A'
    #if 0
    printf("%c
    ",*++cp);    //'A'
    printf("%c
    ",*cp);        //'A'
    #endif
    #if 0
    printf("%c
    ",*cp++);    //'a'
    printf("%c
    ",*cp);        //'A'
    #endif
    #if 0
    printf("%c
    ",++(*cp));    //'b'
    printf("%c
    ",*cp);        //'b'
    #endif
    #if 1
    printf("%c
    ",(*cp)++);    //'a'
    printf("%c
    ",*cp);        //'b'
    #endif
    表达式 结果 再次打印*cp值 说明
    *cp+1 'b'   先计算*cp='a','a'+1='b'
    *(cp+1) 'A'   取cp下一个地址的值'A'
    *++cp 'A' 'A' cp先+1,再取cp+1地址的值,即取cp下一个地址的值'A'
    *cp++ ‘a’ 'A' ++先用后加,所以表达式结果就是*p='a',然后执行cp++.在这条指令后面打印*cp的值='A'
    ++*cp 'b' 'b' =++(*cp).*p='a','a'+1='b'
    (*cp)++ 'a' 'b' ++先用后加,所以表达式结果就是*p='a',然后执行(*cp)++ = ‘a’++,在这条指令后面打印*cp的值='b'
  • 相关阅读:
    CodeForces-1100C NN and the Optical Illusion 简单数学
    HDU-3038 How Many Answers Are Wrong 并查集
    POJ-1321 棋盘问题 DFS
    POJ-1651 Multiplication Puzzle 区间DP
    HDU-2037 今年暑假不AC 贪心
    排序算法的总结
    UVa-679 Dropping Balls 二叉树
    Coursera机器学习——Recommender System测验
    页面置换算法及例题
    这篇最新MySQL面试题请查收
  • 原文地址:https://www.cnblogs.com/Mike2019/p/11805964.html
Copyright © 2020-2023  润新知