<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • c語言字符串定義(c語言字符和字符串區別)


    想弄懂C語言中數組和指針的關系嗎?這篇文章就占據你三分鐘時間,看完你肯定會有收獲!

    C/C++編程筆記:C數組、字符串常量和指針!三分鐘弄懂它

    數組

    數組聲明為 數據類型 名稱[ constant-size ],并將一個數據類型的一個或多個實例分組到一個可尋址的位置

    constant-size可能是一個表達式,但是該表達式必須求值為常量,例如:

    #定義MAX_SIZE 16

    int列表[MAX_SIZE + 1];

    C數組開始于元素0,所以像陣列定義 int a[3];將創建三個int軟件,可尋址如a[0],a[1],和a[2]

    請注意,即使定義很難說a[3],也沒有名為a[3]

    與其他變量一樣,全局和靜態數組元素默認情況下初始化為0,并且自動數組元素填充有垃圾值

    可以使用大括號中的一個或多個值來初始化數組,例如:

    int a[3] = {5, -2, 17};

    ANSI C之前的編譯器可能不允許在自動數組上進行初始化

    如果存在初始化值列表,但未 指定常量大小,則數組的大小與初始化值的數目相同

    int q[] = {1, 2, 3}; 是相同的

    int q[3] = {1, 2, 3};

    要聲明對另一個文件中定義的數組的外部引用,請使用extern int a[];

    C/C++編程筆記:C數組、字符串常量和指針!三分鐘弄懂它

    字符串常量

    在C語言中,類型數組char用于表示字符串,字符串的結尾由設置為0的字節標記(也稱為NUL字符)

    以下定義都將其數組設置為相同的值:

    int str1 [] = {‘a’,’b’,’c’,’ 0′};

    int str2 [] =“ abc”;

    ANSI C還允許定義像int str[3] = “abc”; ,其是相同的int str[3] = {‘a’, ‘b’, ‘c’}; (省略了最終NUL字符)

    多維數組

    多維數組只是數組的數組(數組的數組…)

    類似的多維數組m[3][2]存儲在連續的存儲位置中,例如m [0] [0],m [0] [1],m [1] [0],m [1] [1],m [2] [0] ,m [2] [1]

    C/C++編程筆記:C數組、字符串常量和指針!三分鐘弄懂它

    指針

    指針是包含變量地址的變量

    有兩個與指針關聯的運算符:

    該&操作符返回其參數的地址

    該*引用它的參數通過指針訪問對象指針

    指針的一個簡單示例是:

    int i,j;

    int * p; / *指向’int’的指針* /

    我= 6;

    p =&i; / *將`p’設置為`i’的地址* /

    j = * p; / *將’j’設置為6(’i’的值)* /

    * p = 5; / *將’i’設置為5 * /

    指針可以包含一個地址或一個稱為空指針的特殊值,該值不同于所有有效指針

    指針上下文中的0將在編譯時轉換為空指針

    還有一個預處理器宏NULL(在<stdio.h>或中 定義 <stdlib.h>)

    像expression這樣的表達式將導致 語句是否為空指針,因為它與相同, 并且由于在指針上下文中將其轉換為空指針,因此代碼將與空指針 進行隱式比較if (!ptr) statementptrif (ptr)if (ptr == 0)0ptr

    同樣,將評估聲明,如果是不是一個空指針 if (ptr) statementptr

    指針不能指向:

    常數(像3,不const類似s const int a;)由于值3不具有永久的存儲器地址

    register 變量,因為寄存器不在內存中,因此沒有內存地址

    類似的表達式(8 * k),它們與常量大致相同,因為它們沒有永久的內存地址

    指針和數組

    指針可以視為數組

    這段代碼:

    int main(void){

    int a [3] = {6,3,7};

    int * p =&a [0]; / *將`p’指向`a’的第一個元素* /

    if(a [0] == p [0] && a [1] == p [1] && a [2] == p [2])

    return 1;

    else

    return 0;

    }

    將返回1,因為指向 n的所有有效值p[n]a[n]

    指針是沒有,不過,同為數組

    這是C語言最令人困惑的部分之一,因此這里有三種不同的方式來說明數組a 與指向p第一個元素的指針之間的區別a :

    技術說明:使用直接尋址訪問數組,使用間接尋址訪問指針

    較少技術的解釋:a是一個地址, p是一個保存以下地址的地址a

    極其羅嗦解釋:檢索值從 ,在計算機啟動時的地址,移動?過去,并獲取價值從那里; 要從中檢索值,計算機將從地址開始,獲取存儲在其中的地址并向其添加n,然后從結果地址中 獲取值a[n]ap[n]p

    但是,在大多數情況下,指針和數組訪問可被視為具有相同的作用,主要的例外是:

    1)sizeof 運算符

    sizeof(array) 返回所有元素中使用的內存量 array

    sizeof(pointer)僅返回pointer變量本身使用的內存量

    2)&運算符

    &array是的別名,&array[0]并返回中第一個元素的地址array

    &pointer 返回的地址 pointer

    3)字符數組的字符串文字初始化

    char array[] = “abc”將前四個元素設置 array為’a’,’b’,’c’和’ 0′

    char *pointer = “abc”設置pointer為“ abc”字符串的地址(可能存儲在只讀存儲器中,因此不可更改)

    此外,無法調整數組大小或重新分配數組。

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费