指標的程式設計藝術(二)

2021-06-22 23:31:44 字數 2230 閱讀 3866

指標的程式設計藝術(二)之指標與字串

指標變數大小為4個位元組,看乙個例子:

發現兩個資料的位址距離是8,正好是double型別資料的大小,(位址的差距為指標變數所指向資料型別的大小)但是它不是指標型別變數的大小,其實看這個位址也可以發現它由8位十六進製制資料組成,正好需要4個位元組大小,沒錯 這就是指標變數的大小。

進入正題,指標與字串:

p指向第乙個字元『a』的位址,也就是該字串的首位址。 a

pple

ipod

\0注意:字串的末尾都有乙個空字元作為字串的結束標誌,如果缺少它,將會出現錯誤。

遍歷該字串中的字元:

#include#includeint main()

printf("\n");

printf("%s",p);//直接將字串輸出

return 0;

}

下面乙個缺少結束符的例子:

#include#includeint main()

有的編譯器在編譯的時候會識別出來str2這個錯誤 ,但是有的識別不出來,輸出的結果是字串後面多了好多字元,類似於「燙」。

常用的字串庫函式

通常談到字串的操作,不外乎計算字串長度(string length)、字串拷貝(string copy)、字串連線(string concatenate)、字串比較(string compare)。

下面給出庫函式的使用和自己編寫**模仿庫函式。

計算字串的長度:strlen(str)

#include#include#includeint stringlength(char * p);

int main()

int stringlength(char * p)

return s;

}

字串的拷貝:strcpy(str1,str2);作用:把str2中的字元逐一複製到str1中。

#include#include#includevoid stringcopy(char *p, char *q);

int main()

void stringcopy(char *p, char *q)

}

如果將

char str2[10] = "";
改為 char *str2將會出現錯誤,引文str2沒有指向任何記憶體空間,解決方法是給它分配記憶體。

t = (char *)malloc(10 * sizeof(char));
字串連線:strcat(str1,str2),作用是將str2字串連線到str1的尾端。

#include#include#includevoid stringcat(char *p, char *q);

int main()

void stringcat(char *p, char *q)

while((*p=*q)!='\0')

}

千萬不要這樣:

strcat(str1,str2);//原因還是沒有分配記憶體空間
字串比較:strcmp(str1,str2),作用是將這兩個字串是否相等。

#include#include#includeint stringcompare(char *p, char *q);

int main()

else if(value > 0)

else

value = stringcompare(str1,str2);

if(value==0)

else if(value > 0)

else

return 0;

}int stringcompare(char *p, char *q)

指標程式設計藝術

這段時間仔細看了看 蔡明志寫的 指標的程式設計藝術 對指標有更深的理解。對這段時間所看內容進行一下整理吧.1 指標主要用於變數 一維陣列 二維陣列以及結構體等 在c中要輸出位址則可以採用 int x 10 printf p n x 變數x 乙個指標指向乙個變數,則指標內容為變數的位址,而指標符號 可...

指標程式設計藝術(一)

學習c 語言,都會對指標又愛又恨,愛它的功能強大,恨他難以理解 為了深刻理解指標的藝術,故而總結一下 指標 其實就是指向的位址,所以從變數,陣列看記憶體分配。如圖,位址為0043fb94的記憶體裡面存放的值為100 一維陣列 如果我的陣列的資料型別是double 那麼位址之差就是8位元組 另外,陣列...

《指標的程式設計藝術(第二版)》一3 3 陣列指標

指標的程式設計藝術 第二版 陣列指標 pointers of array 表示陣列的元素,都是指向某個資料型別的指標,如 char parr 4 由於 運算子的優先順序高於 運算子,因此,parr是4個元素組成的陣列,陣列中的每個元素都是指向char資料型別的指標。如果將上述的定義用圖形來表示的話,...