程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [C/C++學習]指針一些事

[C/C++學習]指針一些事

編輯:C++入門知識

[cpp]
#include<iostream> 
using namespace std; 
 
int main(void) 

    /***********************************************************
    指針,內存地址,指針取值,指針是啥
    指針是一個存儲計算機內存地址的變量。   這裡引用是計算機內存地址。
    從指針指向的內存讀取數據叫:指針取值。
    指針可以為void類型,也可以是其他的內置數據類型等。
    也有NULL指針和未初始化指針。
    “*”操作符可以用來聲明一個指針變量,也可以是解引用操作符,當然也可以是
    乘法操作符。
    “&”是地址操作符。  通過在變量前加上&我們可以得到這個變量的地址
    ***********************************************************/ 
 
 
    int *ptr; //聲明一個int類型的指針 
    int value = 1;//聲明一個int類型的值,值為1 
    ptr = &value;//給指針分配一個int類型的值的引用 
    int *p = ptr;//對指針進行取值,這裡可以直接獲得指針指向的內存地址中的數據 
    cout << p << endl; 
    /******************************************************************
    類比一下,指針比作信封     引用比作郵箱     值比作房子
    ok,我們在信封上面寫上郵寄的地址(引用地址),  我們來取值就相當於地址
    對應的房子。我們也可以把信封上的地址塗掉,然後寫上其他的我們想要的地址
    房子是在哪裡不動的,所以不受影響。
    *******************************************************************/ 
 
 
    /*********************************************************************
    下面是void指針    NULL指針    未初始化指針
    *********************************************************************/ 
    int *ptrs;//未初始化 
    int *ptring = NULL;//NULL指針 
    void *vptr;//void指針  未初始化 
    int *iptr; 
    int *vastptr; 
    //void類型可以存儲任意類型的指針或者引用 
    iptr = &value; 
    vptr = &value; 
    cout << iptr << vptr << endl; 
    //顯示類型轉換  把一個void指針轉換成int指針,並取值。 
    vastptr = static_cast<int*>(vptr);  //(int*)vptr; 
    cout << *vastptr << endl; 
 
    //cout << ptrs << ptring << endl; 
    /******************************************************************
    要知道,未初始化的指針也是有內存地址的,但是是一個垃圾地址。
    所以我們不能對未初始化的指針取值。
    最好的情況是你去到的是垃圾地址,接下來你需要對程序進行調試
    最壞情況就會導致程序崩潰。
    *******************************************************************/ 
 
 
    /********************************************************************
    數組是一斷連續的內存空間,來存儲多個特定類型的對象。
    指針用來存儲單個內存地址
    所以數組和指針不是相同的結構,不能互相轉換。
    數組變量是一個常量,就算指針變量指向相同的地址或者一個不同的數組,
    也不能把指針賦值給數組變量。
    我們可以把數組變量賦值給指針時,世界上把指向數組第一個元素的地址賦值給指針。
 
    要注意的是:指針需要和數組元素類型保持一致,除非指針是void類型。
    ********************************************************************/ 
    int myarray[4] = {1, 2, 3, 0}; 
    int *ptrarray = myarray;//*ptrarray = &myarray[0]; 
    cout << *ptr << endl; 
    //ok上面的操作時正確的。來看下面的錯誤 
    //myarray = ptrarray; 
    //myarray = myarrays; 
    //myarray = &myarrays[0]; 
 
    /******************************************************************* 
    結構體和指針。   與數組類似,指向結構體的指針存儲了結構體第一個元素的 
    內存地址。    結構體的指針必須聲明和結構體類型保持一致 或者為void 
    *******************************************************************/ 
    struct person{ 
        int age; 
        char *name; 
    }; 
    struct person first; 
    struct person *ptrstruct; 
 
    first.age = 22; 
    char *fullname = "full name"; 
    first.name = fullname; 
    ptrstruct = &first; 
 
    cout << first.age << ptrstruct->name << endl; 
 
 
    return 0; 

看運行結果:


                                                                                                                                                                                                                    2012/9/27
                                                                                                                                                          

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved