zoukankan      html  css  js  c++  java
  • 44深入理解C指针之---指针安全

      一、指针安全:指针的声明和初始化问题

        1、指针不恰当的声明:

          1)、声明的意思和真是的意图不一致,可以通过格式搞定;

          2)、使用宏定义时,展开的含义有变,通过格式搞定;

          3)、使用类型定义,使用更加方便

     1   1 #include <stdio.h>
     2   2 
     3   3 int main(int argc, char **argv)
     4   4 {
     5   5     int var1;
     6   6     printf("input the var1: ");
     7   7     scanf("%d", &var1);
     8   8     int var2;
     9   9     printf("input the var2: ");
    10  10     scanf("%d", &var2);
    11  11 
    12  12     printf("演示不恰当的指针声明:
    ");
    13  13     int *ptr1, ptr2;
    14  14     ptr1 = &var1;
    15  15     ptr2 = var2;
    16  16     printf("*ptr1: %d and ptr1: %p
    ", *ptr1, ptr1);
    17  17     printf("var1: %d and &var1: %p
    ", var1, &var1);
    18  18     printf("ptr2: %d and &ptr2: %p
    ", ptr2, &ptr2);
    19  19     printf("var2: %d and &var2: %p
    ", var2, &var2);                                                                                                                                       
    20  20     printf("
    ");
    21  21 
    22  22 #define PINT int*
    23  23     printf("使用宏定义的方式定义指针:
    ");
    24  24     PINT ptr3, ptr4;
    25  25     ptr3 = &var1;
    26  26     ptr4 = var2;
    27  27     printf("*ptr3: %d and ptr3: %p
    ", *ptr3, ptr3);
    28  28     printf("var1: %d and &var1: %p
    ", var1, &var1);
    29  29     printf("ptr4: %d and &ptr4: %p
    ", ptr4, &ptr4);
    30  30     printf("var2: %d and &var2: %p
    ", var2, &var2);
    31  31     printf("
    ");
    32  32 
    33  33     printf("使用类型定义的方式定义指针:
    ");
    34  34     typedef int* PPINT;
    35  35     PPINT ptr5, ptr6;
    36  36     ptr5 = &var1;
    37  37     ptr6 = &var2;
    38  38     printf("*ptr5: %d and ptr5: %p
    ", *ptr5, ptr5);
    39  39     printf("var1: %d and &var1: %p
    ", var1, &var1);
    40  40     printf("*ptr6: %d and ptr6: %p
    ", *ptr6, ptr6);
    41  41     printf("var2: %d and &var2: %p
    ", var2, &var2);
    42  42 
    43  43     return 0;
    44  44 }

         

        2、特征:

          1)、提供一种可移植的方式来声明与系统中可寻址的内存区域一致的长度

          2)、用作sizeof操作符的返回值的类型

          3)、用作内存相关函数malloc()和strlen()的参数类型

          4)、常用来声明字符个数、循环计数、数组索引的长度

          5)、可以用在指针的算术运算上

        3、应用:

          1)、打印是占位符是%zu,也可以是%u、%lu

          2)、不要将负数赋值给size_t类型,一定要赋值整数才行

          3)、对指针使用sizeof运算获取指针长度

      代码如下:

  • 相关阅读:
    关于metaclass,我原以为我是懂的
    有趣的版本号
    关于乱序(shuffle)与随机采样(sample)的一点探究
    我在博客园的这一年
    我的进程去哪儿了,谁杀了我的进程
    Elasticsearch学习系列之term和match查询
    数据库垂直拆分 水平拆分
    分布式锁的几种实现原理
    Redis常见面题
    github建仓库注意
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/6960861.html
Copyright © 2011-2022 走看看