指標的程式設計藝術(二)之指標與字串指標變數大小為4個位元組,看乙個例子:
發現兩個資料的位址距離是8,正好是double型別資料的大小,(位址的差距為指標變數所指向資料型別的大小)但是它不是指標型別變數的大小,其實看這個位址也可以發現它由8位十六進製制資料組成,正好需要4個位元組大小,沒錯 這就是指標變數的大小。
進入正題,指標與字串:
p指向第乙個字元『a』的位址,也就是該字串的首位址。 a
pple
ipod
\0注意:字串的末尾都有乙個空字元作為字串的結束標誌,如果缺少它,將會出現錯誤。
遍歷該字串中的字元:
下面乙個缺少結束符的例子:#include#includeint main()
printf("\n");
printf("%s",p);//直接將字串輸出
return 0;
}
有的編譯器在編譯的時候會識別出來str2這個錯誤 ,但是有的識別不出來,輸出的結果是字串後面多了好多字元,類似於「燙」。#include#includeint main()
常用的字串庫函式
通常談到字串的操作,不外乎計算字串長度(string length)、字串拷貝(string copy)、字串連線(string concatenate)、字串比較(string compare)。
下面給出庫函式的使用和自己編寫**模仿庫函式。
計算字串的長度:strlen(str)
字串的拷貝:strcpy(str1,str2);作用:把str2中的字元逐一複製到str1中。#include#include#includeint stringlength(char * p);
int main()
int stringlength(char * p)
return s;
}
如果將#include#include#includevoid stringcopy(char *p, char *q);
int main()
void stringcopy(char *p, char *q)
}
改為 char *str2將會出現錯誤,引文str2沒有指向任何記憶體空間,解決方法是給它分配記憶體。char str2[10] = "";
字串連線:strcat(str1,str2),作用是將str2字串連線到str1的尾端。t = (char *)malloc(10 * sizeof(char));
千萬不要這樣:#include#include#includevoid stringcat(char *p, char *q);
int main()
void stringcat(char *p, char *q)
while((*p=*q)!='\0')
}
字串比較:strcmp(str1,str2),作用是將這兩個字串是否相等。strcat(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資料型別的指標。如果將上述的定義用圖形來表示的話,...