選擇java 進入自由開放的國度

          隨筆 - 49, 文章 - 3, 評論 - 154, 引用 - 1
          數(shù)據(jù)加載中……

          C中傳地址和傳指針比較

          下面是在linux下察看文件大小的代碼,比較了C中傳地址和傳指針的用法,并指出了不同點和使用指針時的注意事項.

          傳地址:
          ?1?#include?<stdio.h>
          ?2?#include?<sys/stat.h>
          ?3?
          ?4?int?main()
          ?5?{
          ?6???char?*?filename?=?"/etc/passwd";
          ?7???
          ?8???struct?stat?infobuf1;
          ?9???if?(stat("/etc/passwd",?&infobuf)?==?-1)??
          10????????perror(filename);???????
          11???else
          12???{
          13???????printf("The?size?of?%s?is?%d\n",?filename,??infobuf.st_size);????
          14???}
          15???
          16???return?0;
          17?}
          18?
          必需使用地址符&,在引用結(jié)構(gòu)體內(nèi)的元素時使用.運算符.

          傳指針:
          ?1?#include?<stdio.h>
          ?2?#include?<sys/stat.h>
          ?3?
          ?4?int?main()
          ?5?{
          ?6???char?*?filename?=?"/etc/passwd";
          ?7???
          ?8???struct?stat?infobuf1;
          ?9???struct?stat?*?infobuf?=?&infobuf1;
          10???
          11???if(stat(filename,?infobuf)?==?-1)
          12????????perror(filename);???????
          13???else
          14???{??????
          15?????printf("The?size?of?%s?is?%d\n",?filename,??infobuf->st_size);
          16???}
          17???
          18???return?0;
          19?}
          20?
          在第9行聲明指針后,必需要進行初始化,否則在linux下,被初始化為一個隨機的地址,在第11行對其操作時酒會發(fā)聲錯誤(在linux下提示"段錯誤").在第15行,引用結(jié)構(gòu)體內(nèi)的元素時,使用地址運算符->,或者使用(*infobuf).st_size.

          總結(jié):
          ??? 1、指針引用前必需初始化,初始化最簡單的辦法就是聲明一個同類型的變量,因為變量會被初始化,會被分配內(nèi)存空間,所以指針就有指的地方了。如:傳指針程序段中的第8,9行。
          ??? 2、理解傳地址和傳指針的區(qū)別。不管怎么說都是要一個地址,譬如在函數(shù)stat(char * filename, struct stat * buf), 對于buf傳入時必須是一個地址,不管是指針或是一個變量的地址,歸根都是一樣的,都是內(nèi)存中的同一塊區(qū)域。
          ??? 3、對于函數(shù)聲明為stat(char &filename, struct stat &buf)的形式,傳入時就不能是地址或者指針,而必需是變量了。

          posted on 2006-03-27 08:28 soochow_hhb 以java論成敗 以架構(gòu)論英雄 閱讀(1144) 評論(0)  編輯  收藏 所屬分類: Reading

          主站蜘蛛池模板: 普宁市| 芜湖市| 临清市| 西城区| 宜兴市| 兴义市| 陈巴尔虎旗| 杭锦旗| 黔西县| 西城区| 祁阳县| 丹寨县| 岐山县| 工布江达县| 阿拉善左旗| 石泉县| 若尔盖县| 桃江县| 安义县| 金华市| 基隆市| 弥勒县| 尤溪县| 阿勒泰市| 房山区| 余庆县| 德州市| 和硕县| 玉环县| 大英县| 磐石市| 五华县| 石嘴山市| 含山县| 会理县| 陕西省| 西吉县| 宁夏| 东方市| 扎囊县| 竹北市|