再論數組與指標

來源:互聯網
上載者:User

話說已經好久沒有進行理論知識補充了,前幾天又看到一個朋友的工資上萬了,到百度工作去了,真是無限仰慕啊

不廢話了,再說下自己對數組的新認識吧,算是一個以前的一個誤解了,今天晚上看c專家與編程,又得到了新的認識

先把代碼貼出來

#include <iostream>using namespace std;int main(){    int a[10];    int *p;    int i=0;    for (i=0; i<10; ++i)         a[i]=i;    p=a;    for (i=0; i<10; ++i)         *p++=0;    //這裡*p++換成p[i]        //p=a;    for (i=0; i<10; ++i)        cout<<"a[i]="<<a[i]<<" *p++="<<*p++<<endl;   //這裡一樣        while (1);    return 0;}

 

好了,大家可以預期一下結果了,

第一種:  兩個數組都是0

第二種: a全部為0   如果上面加上注釋的p=a話,那就是一樣的了

 

總結一下,過去一直是數組和指標混用。就如剛剛兩種形式,第二種完全是把指標當成數組了,但是卻沒有申請大小

以後要注意不能指標,數組混用,要不然被別人認為你什麼都不懂,這算是一個新的認識吧,僅此記下。

你要是動態申請數組的話,那還是數組,指標是沒有大小限制的。

 

下面再貼出一代碼,要求讀者自己思考預計結果,並分析原因

#include <iostream>using namespace std;char ga[7]={"123456"};void f1(char ca[]){     cout<<&ca<<endl;     cout<<&(ca[0])<<endl;     cout<<&(ca[1])<<endl;}void f2(char *pa){     cout<<&pa<<endl;     cout<<&(pa[0])<<endl;     cout<<&(pa[1])<<endl;}int main(){    cout<<&ga<<endl;    cout<<&(ga[0])<<endl;    cout<<&(ga[1])<<endl;    f1(ga);    f2(ga);    while (1);    return 0;}

下面是正確輸出結果

0x43f000
123456
23456
0x22ff20
123456
23456
0x22ff20
123456
23456

1.1這裡主要分析下第一個地址與後面地址為什麼不同,不對,應該是後面的地址與第一個地址為什麼不同

經我分析大概為:  這個是以傳值方式進行的,也就是       對實參做一部分拷貝並傳遞給調用的函數,函數不能修改作為實參的實際變數值,而只能修改傳遞給他的那份拷貝

可以說 儲存這份拷貝的肯定是一個新的地址,故得到上述的結果應該是情理之中的

1.2當然還有一個問題,這裡數組參數的地址和數組參數的第一個元素的地址竟然不一樣????

這裡要注意了,輸出的是 &ga    這裡是地址的地址

而                           &(ga[0])是值的地址

1.3最後還有一個問題,就是問什麼輸出的是字串呢?

具體的大家可以看這裡

這裡我們改成這樣就可以了

    //cout<<&ga<<endl;
    //cout<<(void*)&(ga[0])<<endl;
//cout<<(void*)&(ga[1])<<endl;

想想 我們用c語言 是怎麼實現輸出模式的,一樣的這裡只是一個輸出樣式的表達而已

printf ("%#x\n",&ga);
    printf ("%#x\n",&(ga[0]));
    printf ("%#x\n",&(ga[1]));

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.