zoukankan      html  css  js  c++  java
  • C语言中指针中的值赋值给数组

      如果把各种语言做个冷兵器类比的话,C语言一定是刀客的最佳工具.入门很简单,但是要是能把它熟练运用,那就是顶尖级别的高手了.

    用了那么多年的C语言,发现自己还是仅仅处于熟练的操作工.今天遇到了一个bug,就是和指针的赋值有关系.请看代码:

     1 #include <stdio.h>
     2 
     3 static int array[2];
     4 int main()
     5 {
     6 
     7     int *ptest = NULL;
     8 
     9     ptest = (int*)malloc(2*sizeof(int));
    10 
    11     ptest[0] = 32767;
    12     ptest[1] = -32767;
    13 
    14     array = ptest;
    15     printf("val1:%d val2:%d 
    ",array[0],array[1]);
    16 
    17     return 0;
    18 
    19 }
    20 ~       

     各位看官,能否看到这个代码的问题吗?

     其实,这段代码有个严重的问题,就是把指针的地址指向了数组的地址,就是把一个值打算放到两个地址中,这个是肯定不对的了.让在复杂的代码丛林中,没有意识到这个用法时候,那就很容易把指针混为一体.

    假如array是个指针的话,那这份代码九对了.

      正确的写法如下所示:

     1 #include <stdio.h>
     2 
     3 //static int array[2];
     4 int *array= NULL;
     5 int main()
     6 {
     7 
     8     int *ptest = NULL;
     9 
    10     ptest = (int*)malloc(2*sizeof(int));
    11 
    12     ptest[0] = 32767;
    13     ptest[1] = -32767;
    14 
    15     array = ptest;
    16     printf("val1:%d val2:%d 
    ",array[0],array[1]);
    17 
    18     return 0;
    19 
    20 }

      对C语言基本功的训练,看来不能松懈啊.

  • 相关阅读:
    python中字典排序,列表中的字典排序
    Python模块:operator简单介绍
    java 物理资源回收 finally与try
    Eclipse相对路径
    java Lambda
    java 匿名内部类
    java File类
    java单例类
    java 创建子类
    jvm运行时数据区域
  • 原文地址:https://www.cnblogs.com/dylancao/p/10097853.html
Copyright © 2011-2022 走看看