c語言結構體知識點

2021-10-09 23:26:34 字數 3452 閱讀 4926

一、strlen和sizeof的區別

#include

#include

main()

答案為6和5.

注意這個字串的長度用strlen來求的話,我們就不用算後面的\0,但是用sizeof來算的話就要算入\0.

『0』ascii不為0,但是』\0』的為空值。

字元賦值:char*sp,s[10];

如果是sp=「hello」,那麼是正確的,這個代表將hello的位址存放到sp當中,如果是s=「hello」,這個是錯的,s為陣列首元素的位址,不能夠把「hello」字串直接賦值給陣列的乙個位址。

二、如何將字串賦值給陣列

char s[10]=這個裡面的賦值少於十,所以後面的第四個字元開始,後面全部用字串結束標誌『\0』來填充。

char s=

則這個括號裡面應該是**的6;

char =

這個表示式是錯誤的,因為沒有字串結束標誌\0.

三、正確的字串的賦值方法最常用的幾種:

1、char s[10]=

2、char s[10]=「string」

3、char s=「string」

4、char m[10];

int i;

for(i=0;i<9;i++)

m[i]=』\0』;

5用指標來指字串

①char *p=「djksjhfsjk」

②char a[10]=「shkjhhsf」,*p;

p=a;

printf("%s",p)

四、字串的輸入與輸出

①當對字串進行輸出,輸出項可以是字串常量,可以是字元陣列名,也可以是已指向字串的字元指標變數

②當對字串輸入時,輸入項可以是字元陣列名,也可以是字元指標變數,當輸入的為指標變數的時候,指標變數必須由足夠的連續儲存單元。

如:

#include

main()

我們討論如果以上程式輸入的是abcd,則我們輸出的是abcd;

如果輸入的是a bcd;則只會輸出a;因為空格,回車符以及tab鍵都作為輸入資料的分隔符而不能被讀入。

五、當輸入的是陣列元素的位址時,輸入的字元將從這一元素開始,依次輸出存放到該陣列中。

#include

main()

;scanf

("%s"

,a);

//abcd在記憶體當中是abcd\0*****

printf

("%s\n"

,a);

}

如果該程式輸入的是abcd,那麼是從a[0]開始儲存的,所以我們輸出的結果是abcd.

現在將上面的程式改一下為

#include

main()

;scanf

("%s"

,a[3

]);//***abcd\0**

printf

("%s\n"

,a[3])

;}

如果該程式輸入abcd的話,我們將會輸出***abcd。

六、字串陣列

*(p[1]+1)代表的是p[2]的位址。

char a[5]=

char[3][5]=

七、用字串處理的函式

字串賦值函式 strcpy ,copy

呼叫形式 strcpy(s1,s2)

strlen:求字串的長度,但是長度不會加入\0;

strcmp:比較兩個字串的大小,誰先大就誰大

strcat:連線兩個字串。strcat(s1,s2),將s2連線到s1後面。

注意:這個連線以及複製都是需要將\0連帶一起的連線以及複製的,不要忽略了。

八、程式舉例

①、編寫函式slength(char*s),函式返回指標

s所指字串的長度,即相當於庫函式strlen的功能

#include

intslength

(char

*s)return n;

}main()

②編寫scopy(char *s,char *t),將指標t所指的字串複製到指標s所指的儲存空間中。

#include

void

scopy

(char

*s,char

*t)main()

void

scopy

(char

*s,char

*t)

③編寫函式scomp(chars1,chars2),將兩個字串s1和s2進行比較,若串s1=串s2,函式值返回值為0,若串s1>串s2,函式值為正數;若串s1《串s2,則函式值為負值,即相當於strcmp的功能。

#include

#define n 40

#define n 61

intgettext

(char

(*t)

[n])

;void

puttext

(char t[

][n]

,int s)

;int

scomp

(char

*s1,

char

*s2)

main()

④編寫程式從終端讀入若干文字行(不超過4行,每行不超過60個字元),遇到行結束輸入,然後將此文字左側加上行號後輸出。

#include

main()

intgettext

(char

(*t)

[n])

return i;

}void

puttext

(char t[

][n]

,int s)

}

⑤從輸入的若干個字元中找出最小的串輸出

#include

#define n 40

#define m 50

intgetstr

(char t[n]

[m])

return i;

}char

*findmin

(char t[

][m]

,int s)

}main()

C語言知識點 結構體

郝斌老師講解問題的四 寶 為什麼需要a 什麼是a 怎麼用a 使用a需要注意哪些問題 為了表示一些複雜的事物,而普通的基本型別無法滿足實際要求 舉個例子 乙個學生有 int age float scrore char 三個屬性,定義乙個學生可以使用 int student1age 10 float s...

c語言結構體知識點

一 結構體和共用體以或使用者定義型別 如 typedef 型別名 識別符號 typedef int integer 該語句把ineger說明成了乙個int 的型別名,在此說明之後,可以用識別符號integer來定義整型變數 例如 ineger a 等價於int a 例如 typedef char c...

結構體知識點總結

對於結構體的知識點,我主要分為以下幾點來講解 結構體的宣告 結構體型別的建立 結構體成員的訪問 結構體的初始化 結構體內存對齊 位段。1.結構體的宣告 struct stu 分號不能丟2.結構體型別的建立 有兩種建立的方法,第一種 struct stu struct stu s1 定義了乙個結構體變...