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语言基本功的训练,看来不能松懈啊.

  • 相关阅读:
    Android 源码阅读之MMS细读TransactionService.java
    [Java2 入门经典]第16章 线程
    Android 源码阅读之建立3G网络流程
    从架构上看Android多媒体播放器
    Android 开发日志之仿三星Launcher
    非常适合OA系统的菜单
    模拟动网当前位置下拉菜单
    模拟windows菜单选项卡效果
    TreeView的各种操作
    ASCII表
  • 原文地址:https://www.cnblogs.com/dylancao/p/10097853.html
Copyright © 2011-2022 走看看