<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    歡迎使用我的 在線工具

    小D

    讀歷史、看小說(shuō)、寫(xiě)程序都是我所愛(ài)。技術(shù)不好,頭腦不靈光,靠的是興趣。
    隨筆 - 35, 文章 - 25, 評(píng)論 - 13, 引用 - 0
    數(shù)據(jù)加載中……

    關(guān)于指針

    #include <iostream.h>
    #include <string.h>
    void main()
    {
    /* test 1?
    ?const int c_ival = 0;
    ?int *pi;
    ?pi = c_ival;//指針變量可以通過(guò)一個(gè)常量賦值
    ?int ival = 2;//指針變量不可以通過(guò)一個(gè)變量賦值
    ?//pi = 2; //任何字面量,除0外,都不可以給指針變量賦值
    ?pi = 0; //指針只能通過(guò)字面值0或者const量0,以及NULL預(yù)定義變量賦值
    ?pi = NULL;//NULL是一個(gè)預(yù)處理變量,也可以為指針變量賦值。
    */

    /* test 2
    ?double dval;
    ?double *pd = &dval;//可通過(guò)變量的地址(指針)給指針變量賦值
    ?double *pd2 = pd; //同類型的指針變量可以賦值
    //?int *pi = pd;?? //不同類型的當(dāng)然不能復(fù)制了
    //?int *pi = &dval; //類型不同的變量的指針不能互相賦值
    */

    /* test 3
    ?double obj = 3.14;
    ?double *pd = &obj;//OK,不多說(shuō)
    ?void *pv = &obj;
    ?pv = pd;
    ?int *pi;
    ?//pi = &2;//不能對(duì)常量取地址。
    ?int iv = 11;
    ?pi = &iv;
    ?pv = pi;//類型相同的變量才可以賦值,而且void*型指針可以保持任何對(duì)象的地址
    ?//void*指針只能用于比較,傳參,不可以操作其指向的對(duì)象
    */

    ?/**
    ??友情提供:
    ??指針和引用的比較:
    ??雖然引用(reference)和指針都可以間接訪問(wèn)另一個(gè)值,但它們之間有兩個(gè)主要的區(qū)別。
    ??第一個(gè)區(qū)別在于引用總是指向某個(gè)對(duì)象:定義引用時(shí)沒(méi)有初始化是錯(cuò)誤的。第二個(gè)重要
    ??的區(qū)別則是賦值行為的差異:給引用賦值修改的是該引用所關(guān)聯(lián)的對(duì)象的值,而并不是
    ??使引用與另一個(gè)對(duì)象關(guān)聯(lián)。應(yīng)用一經(jīng)初始化,就始終指向同一個(gè)特定的對(duì)象。
    ?*/

    /* test 4
    ?int ival = 1024, ival2 = 2048;
    ?int *pi = &ival, *pi2 = &ival2;
    ?pi = pi2;
    //正確
    ?int &ri = ival, &ri2 = ival2;
    ?ri = ri2;
    ?cout<<"ri = "<<ri<<", ri2 = "<<ri2<<endl;
    ?//output :ri = 2048, ri2 = 2048
    ?//注意這里并沒(méi)有改變r(jià)i與ri2的指向,而是改變他們所各自關(guān)聯(lián)的對(duì)象的值。
    */

    /* test 5
    ?int ival = 1024;
    ?int *pi = &ival;
    ?int **ppi = &pi; //C++使用**操作符指派一個(gè)指針指向另一個(gè)指針。**也是指向符。
    ?//下面相同的值,相同的對(duì)象
    ?cout<<ival<<" "<<*pi<<" "<<**ppi<<endl;
    */

    //忍不住了,討論下,const引用
    ?//正解:const引用是指向const對(duì)象的引用。
    ?//const int ival = 1024;?//引用必須初始化
    ?//const int &refVal = ival;
    ?//int &ref2 = ival;//非常量對(duì)象的引用不可以指向常量對(duì)象的引用

    //?const int &refVal2 = 2;//const引用可以以字面量初始化
    //?int vali = 1111;
    //?const int &refVal3 = vali;//const引用可以以變量初始化,但是通過(guò)該引用訪問(wèn)該變量,就只能當(dāng)做常量使用。
    //?refVal3 = 100; 不可修改,表明這里是該引用指向了一個(gè)常量對(duì)象。
    ?//l-value左值,左值是變量,可左可右。 r-value右值,右值是常量(包括字面量),只能右

    ?/*
    ??在指針上加上(或減去)一個(gè)整形數(shù)值n等效于獲得一個(gè)新指針,該新指針指向指針原來(lái)指向的元素之后
    ??(或之前)的第n個(gè)元素。
    ??兩個(gè)指針減法操作的結(jié)果是標(biāo)準(zhǔn)庫(kù)類型ptrdiff_t的數(shù)據(jù)。這是一個(gè)signed整形,它表示兩個(gè)指針之間
    ??的差距。
    ?*/?????
    /*?test 6
    ?const size_t arr_sz = 5;
    ?int int_arr[arr_sz] = {0, 1, 2, 3, 4};
    ?for(int *pbegin = int_arr, *pend = int_arr + arr_sz;
    ???pbegin != pend; ++pbegin)
    ???{
    ???//?cout<<int_arr[5]; 為什么會(huì)輸出5,詭異啊。
    ????cout<<*pbegin<<' ';
    ???}
    */

    ?//指向const對(duì)象的指針和const指針
    ?//指向const對(duì)象的指針這樣聲明 const double *cptr;
    ?//1. 不能修改所指對(duì)象的值,因?yàn)槭莄onst對(duì)象嘛。
    ?//*cptr = 42; //這是錯(cuò)誤的。
    ?//2. 不能使用void*指針保持const對(duì)象的地址,而必須使用const void*。
    //?const int universe = 42;
    //?const void *cpv = &universe;
    //?void *pv = &universe; //錯(cuò)誤的,必須使用const void*
    ?//3. 對(duì)于非const對(duì)象的處理和const引用是一樣的。
    ?//但是我們可以修改指針變量的值,使我們的指針指向新的對(duì)象。只是這個(gè)對(duì)象無(wú)論是否為const
    ?//只要我們通過(guò)這個(gè)指針訪問(wèn),那么系統(tǒng)都認(rèn)為其為const。(自以為指向const的指針)

    ?//const指針是這樣 double *const cptr;
    ?//指針變量的本身的值無(wú)法修改,也就是指針無(wú)法執(zhí)行初始指定的對(duì)象的值,
    ?//這樣和const引用則比較像了,但是我們可以修改我們所執(zhí)行的對(duì)象。

    /*
    ?double dval = 33.33;
    ?double *const cptr = &dval;
    ?*cptr = 332.02;
    ?cout<<dval<<" "<<*cptr;
    ?//下面最變態(tài)的:指向const對(duì)象的const指針
    ?const double pi = 3.14159;
    ?const double *const pi_ptr = &pi;
    ?//從右向左讀,關(guān)于指針都一般都這么讀,既不可以修改指針?biāo)赶虻膶?duì)象的值,也不可以修改該指針的指向。
    */
    /*
    ?//typedef和指針 不多說(shuō)反正記得typedef不是簡(jiǎn)單的文本擴(kuò)展,其實(shí)只要注意const應(yīng)該寫(xiě)在類型后面就可以了
    ?//所以:
    ?//下面
    ?typedef string *pstring;
    ?const pstring cstr;
    ?//等價(jià)于
    ?string *const cstr;//也就是const指針。
    */

    }

    ?

    再加一點(diǎn),天亮了要睡覺(jué)了??!

    #include <stdio.h>
    #include <iostream.h>
    #include <string.h>
    #include <string>
    using namespace std;
    void main()
    {
    ?const char *cp1 = "A string example";
    ?const char *cp2 = "A different string";
    //?int i = strcmp(cp1, cp2);
    //?printf("%d\n", i);
    //?i = strcmp(cp2, cp1);
    //?printf("%d\n", i);
    //?i = strcmp(cp1, cp1);
    //?printf("%d\n", i);

    //?char largeStr[16 + 18 + 2];
    //?strcpy(largeStr, cp1);
    //?printf("%s\n", largeStr);
    //?strcat(largeStr, " ");
    //?strcat(largeStr, cp2);
    //?printf("%s\n", largeStr);

    //?char ca[] = {'C', '+', '+', '\0'};
    //?cout<<strlen(ca)<<endl; 空格并不是null


    ?int ia[3][4] = {
    ??{0, 1, 2, 3},
    ??{4, 5, 6, 7},
    ??{8, 9, 10, 11},
    ?};

    ?typedef int int_array[4];
    ?int_array *ip = ia;

    ?for(int_array *p = ia; p != ia + 3; ++p)
    ??for(int *q = *p; q != *p + 4; ++q)
    ???cout<< *q <<endl;

    ?//可使用數(shù)組長(zhǎng)度后面的一對(duì)圓括號(hào),對(duì)數(shù)組元素做值初始化:
    ??int *pia2 = new int[10]();
    ?//?這里初始化為0
    ?// 允許定義類類型的const數(shù)組,但該類型必須提供默認(rèn)的構(gòu)造函數(shù)
    ?//?const string *pcs = new const string[100];//似乎不支持, 而且沒(méi)有必要,
    ??//因?yàn)閟tring早已做好了相關(guān)的支持。
    ??//這里就會(huì)使用默認(rèn)構(gòu)造函數(shù)來(lái)初始化數(shù)組元素
    ??//使用delete [] 數(shù)組名 來(lái)釋放數(shù)組空間。
    ??//delete [] pcs;
    ??delete [] pia2;

    }

    ?

    posted on 2009-11-04 19:18 vagasnail 閱讀(252) 評(píng)論(0)  編輯  收藏 所屬分類: C\C++

    主站蜘蛛池模板: 在线观看无码AV网站永久免费| 亚洲国产精品热久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 免费视频中文字幕| 日本高清免费观看| 污污免费在线观看| 亚洲综合精品伊人久久| 亚洲国产成人久久综合碰碰动漫3d | 中文字幕久精品免费视频| 日韩色视频一区二区三区亚洲 | 亚洲天堂2016| 亚洲乱码卡一卡二卡三| 亚洲黄色免费电影| 中文字幕免费在线看线人| 国产免费一区二区三区免费视频| 亚洲精品欧美综合四区| 亚洲性色高清完整版在线观看| 国产亚洲精品AA片在线观看不加载 | 亚洲欧美精品午睡沙发| 亚洲高清视频在线播放| 亚洲精品色午夜无码专区日韩| 又黄又爽的视频免费看| 成人毛片免费网站| 全部一级一级毛片免费看| 亚洲色最新高清av网站| 亚洲一区二区三区亚瑟| 亚洲人成国产精品无码| 亚洲w码欧洲s码免费 | 亚洲一区AV无码少妇电影☆| 免费一级毛片不卡不收费| 波多野结衣久久高清免费| a毛片基地免费全部视频| 97性无码区免费| 羞羞视频免费网站日本| 偷自拍亚洲视频在线观看99| 亚洲精品国产精品| 亚洲永久网址在线观看| 亚洲人成网站色在线观看| 亚洲色欲色欲www在线播放 | 免费人成在线观看69式小视频| 一级毛片成人免费看免费不卡|