C++指標、數組和結構

來源:互聯網
上載者:User

 

沒有任何對象會被分配到地址0。因此,0被當做一個指標文字量,表明一個指標當時並沒有指向任何對象。在C中流行的是用一個宏NULL表示0指標。由於C++收緊的類型檢查規則,採用普通的0而不是一些人建議的NULL宏,帶來的問題會更少一些。

數組元素的個數,即數組的界,必須是一個常量運算式。如果需要變化的界,那麼可以用vector。例如:
void f(int i)
{
    int v1[i];  //錯誤,數組大小必須是常量運算式
    vector<int> v2(i); //可以
}

逗號是序列運算子,不允許出現在常量運算式裡。例如:
int bad[5,2]; //錯誤,逗號不允許出項在常量運算式裡

如果明確給出了大小,數組在初始化列表中給了多餘的元素就是錯誤。例如:
char v3[2] = {'a', 'b', 0}; //錯誤,初始式太多
char v4[3] = {'a', 'b', 0}; //可以
如果初始式列表裡的元素太少,剩餘的元素將被設定為0。例如:
int v5[8] = {1, 2, 3, 4};
等價於
int v5[8] = {1, 2, 3, 4, 0, 0, 0, 0};

char p[] = "abc""def";等價於char p[] = "abcdef";

int v[] = {1, 2, 3, 4};
int * p3 = &v[4]; //指向最後元素之後一個位置
取得超出一個數組結束之後一個元素位置的指標,這件事將保證可以做到。當然,這個指標事實上並不指向數組裡的一個元素,因此不能通過它去讀或者寫

常量必須初始化。例如:
const int model = 90; //model是個常量
const int x;  //錯誤,沒有初始化

int my_f(int);
const int c3 = my_f(3); //可行,編譯器不知道c3的值

int a = 3;
const int* p = &a; //可以
*p = 10;  //錯誤,*p為const int

int& n = 2  //錯誤,要求左值
const int& n = 2; //可以

void指標不能直接運算。例如:
int* p;
void* pv = p; //可以
*pv; //錯誤
pv++ //錯誤

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.