C語言基礎(chǔ)知識分享續(xù)篇
寫在前面
好了,現(xiàn)在我們開始C語言的第二個部分.今天我們需要看下面幾個知識點,都是非常簡單的,我們主要認識一下.
數(shù)組
我們知道一個一個屬性可以用一個類型去表示,那么我想問的是如果是一個屬性的多個呢?也就是多個一樣的東西,此時我們就要使用數(shù)組來進行表示,所謂的數(shù)組就是存儲數(shù)據(jù)的容器,保證多個數(shù)據(jù)的數(shù)據(jù)類型要一致,C語言中給了數(shù)組的定義:一組相同類型元素的集合.
數(shù)組使用
我們想要存儲1~10這幾個數(shù)據(jù)我們應(yīng)該如何存儲?很簡單.
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定義一個整形數(shù)組,最多放10個元素數(shù)組訪問注意了,如果我們沒有在[]中具體元素的個數(shù),那么我們實際存儲元素的個數(shù)按照后面初始化的個數(shù)來進行計算,如果給了實際元素的個數(shù),那么我們后面最多存儲元素就是規(guī)定的元素個數(shù).我們?nèi)绻L問數(shù)組的元素,那么我們就要依賴數(shù)組的下標,記住數(shù)組的下標是從0開始的,這一點非常重要.
int main()
{
int i = 0;
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (i = 0; i<10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
函數(shù)
所謂的函數(shù)我們可以稱之為是代碼的功能的集合,我們把程序不同的功能寫成一個個函數(shù),這樣我們后面是可以再其他地方重復調(diào)用的.其中main函數(shù)也是一個函數(shù).函數(shù)的基本結(jié)構(gòu)是
放回置 函數(shù)名(參數(shù)列表)
{
函數(shù)體
}我們來實現(xiàn)一個打印1-10的函數(shù).
void Print()
{
for (int i = 0; i < 10; i++)
{
printf("%d ",i+1); // ??)--]-三字母詞
}
}我們調(diào)用函數(shù)只需要用函數(shù)名和相關(guān)的參數(shù)就可以了.
int main()
{
Print();
return 0;
}
字符串
在C語言中用一對""括起來的字符我們稱之為字符串,就像"hello world".注意我們C語言是沒有字符串類型的,大家不要搞錯了就行.
在C語言中字符串的末尾其實隱藏著一個'\0';y也就是只要你使用雙引號輸入一個字符串,它的末尾就是自動攜帶一個'\0'來作為字符串的結(jié)束標志,實際在內(nèi)存中,上面的字符串是這樣的“hello world\0"末尾帶了一個'\0'來作為結(jié)束標志.我們驗證一下.
#include <stdio.h>
int main()
{
char * str = "hello world";
return 0;
}
上面我們驗證的還是不太清楚,這里我們再次看一個現(xiàn)象.
#include <stdio.h>
int main()
{
char arr1[] = { 'a', 'b', 'c', 'd' };
char arr2[] = { 'a', 'b', 'c', 'd','\0' };
char* arr3 = "abcd";
printf("arr1 %s\n", arr1);
printf("arr2 %s\n", arr2);
printf("arr3 %s\n", arr3);
return 0;
}
也就是所謂的字符串我們可以這樣認為,我們可以認為他們是字符數(shù)組,但是字符數(shù)組最后我們一定要帶上一個'\0',注意我們是這么理解,實質(zhì)肯定有所不同,我們先不談,這涉及到其他的內(nèi)容.
strlen && sizeof
我們談到字符串和字符數(shù)組我們就不得不說一下strlen和sizeof得區(qū)別了,記住了它最大得一個區(qū)別,sizeof是關(guān)鍵字,strlen是函數(shù),這是本質(zhì)得不同.在功能呢上,sizeof計算是我們數(shù)組開辟得空間,它的單位是字節(jié),strlen是計算有效字符的個數(shù),所謂的有效字符是指'\0'之前的都是有效字符.
sizeof
我們先來測試一下sizeof關(guān)鍵字.
int main()
{
char arr1[] = { 'a', 'b', 'c', 'd' };
char arr2[] = { 'a', 'b', 'c', 'd', '\0' };
char arr3[10] = { 'a', 'b', 'c', 'd', '\0' };
printf("arr1 %d\n", sizeof(arr1));
printf("arr2 %d\n", sizeof(arr2));
printf("arr3 %d\n", sizeof(arr3));
return 0;
}
這個我們已經(jīng)知道了,那么我們這里在和大家說一下sizeof的的用法,我們sizeof既可以計算類型的大小,也可以計算變量占據(jù)空間的大小.
int main()
{
int a = 0;
printf("int %d\n", sizeof(int));
printf("a %d\n", sizeof(a));
return 0;
}
但是我們計算類型和計算變量是有一點區(qū)別的,計算變量我們可以不帶括號.
int main()
{
int a = 0;
printf("a %d\n", sizeof a);
return 0;
}
但是我們參數(shù)是類型的時候我們必須帶上括號.
int main()
{
int a = 0;
printf("int %d\n", sizeof int);
return 0;
}
strlen
下面我們開始用一下strlen函數(shù),這個是在標準庫string.h中的,我們使用前需要引入頭文件.strlen函數(shù)就是為了尋找字符'\0',知道知道'\0',否則我們會一直計數(shù).
int main()
{
char arr1[] = { 'a', 'b', 'c', 'd' };
char arr2[] = { 'a', 'b', 'c', 'd', '\0' };
char* arr3 = "abcd";
printf("arr1 %d\n", strlen(arr1));
printf("arr2 %d\n", strlen(arr2));
printf("arr3 %d\n", strlen(arr3));
return 0;
}
轉(zhuǎn)義字符
假如我們要在屏幕上打印一個目錄:c:\code\test.c.我們該如何寫代碼,是不是按部就班的直接復制粘貼.看一下現(xiàn)象.
int main()
{
printf("%s\n", "c:\code\test.c");
return 0;
}
此時我們就會發(fā)現(xiàn)和我們想的有點不太一樣.是我們想錯了嗎?不是的,是大家缺了一個知識點.在C語言中,為了我們數(shù)據(jù)的打印更加優(yōu)美,此時添加了很多的轉(zhuǎn)義字符.什么是轉(zhuǎn)義字符,這個就是改變了原本意思的字符.今天我們用一下常見的轉(zhuǎn)義字符.
轉(zhuǎn)義字符 | 說明 |
\? | 在書寫連續(xù)多個問號時使用,防止他們被解析成三字母詞 |
\\' | 用于表示字符常量' |
\“ | 用于表示一個字符串內(nèi)部的雙引號 |
\\ | 用于表示一個反斜杠,防止它被解釋為一個轉(zhuǎn)義序列符。 |
\a | 警告字符,蜂鳴 |
\b | 退格符 |
\f | 進紙符 |
\n | 換行 |
\r | 回車 |
\t | 水平制表符 |
\ddd | ddd表示1~3個八進制的數(shù)字。 如: \130 X |
\xdd | dd表示2個十六進制數(shù)字。 如: \x30 0 |
下面我們認識一下三字母詞
int main()
{
printf("(are you ok??)"); // ??)--]-三字母詞
return 0;
}
在一些老的編譯器??)會被解析成],不過現(xiàn)在的編譯器一般不這么干了,我們了解就可了.
我們說一下常見的一些轉(zhuǎn)義字符,其余的就不談了,有興趣的自己可以查一查驗證一下就可以了,很簡單的.
\\\ 如果我們想要打印 字符'\\' ,在\的前面再加一個\就行了\ddd 這里面ddd表示的是3個8進制數(shù),可以使用1-3個8進制數(shù)\xdd dd表示的兩個十六進制數(shù)
下面我們來練習一個習題,我們求一下字符串的長度
#include<stdio.h>
#include <string.h>
int main()
{
char* str = "c:\test\328\test.c";
printf("%d\n", strlen(str));
return 0;
}
這個字符串的長度是4,就是下面的“c : \t e s t \32 8 \t e s t . c”
操作符
這里只是認識,后面的再說吧.
算數(shù)操作符: + - * / %邏輯操作符: && ||移位操作符: >> <<賦值操作符: = += -= *= /= &= ^= |= >>= <<=位操作符: & ^ |條件操作符: exp1 ? exp2 : exp3逗號表達式: exp1, exp2, exp3, …expN
下面我們只說一下逗號表達式,所謂的逗號表達式就是我們根據(jù)從左到右的規(guī)則依次往后面計算,該賦值的賦值,該替換的替換.
int main()
{
int a = 0;
(a = 2 * 6, a * 3, a = a + 5);
printf("a = %d\n", a);
return 0;
}
選擇語句
所謂的選擇語句就是我們在眾多的選項中選擇一個符合調(diào)價的,我們這里有下面兩個類別.
if else
我們先用一下你就明白了,很簡單.
int main()
{
int coding = 0;
printf("你會去敲代碼嗎?(選擇1 or 0):>");
scanf("%d", &coding);
if (coding == 1)
{
printf("堅持,你會有好offer\n");
}
else
{
printf("放棄,回家賣紅薯\n");
}
return 0;
}
此時我們就明白了他們的含義,如果我們符合條件,那么我們就執(zhí)行該條件下的代碼.那么我想問一下我們只有這兩個個條件嗎?不是的,我們也是可以田間else if 的.
int main()
{
int coding = 0;
printf("你會去敲代碼嗎?(選擇1 or 0 or -1):>");
scanf("%d", &coding);
if (coding == 1)
{
printf("堅持,你會有好offer\n");
}
else if (coding == -1)
{
printf("如果你是百萬富翁當我沒說話\n");
}
else
{
printf("放棄,回家賣紅薯\n");
}
return 0;
}
同時我們else if和else都是可以省略的,只保留if,但是我們絕對不可以只讓else或者是else的個數(shù)多余if.注意else是和它上面最近的if進行匹配的,這里我就不詳細的說了,你一驗證就明白了.
switch
除了if else選擇之外我們還是有另外的一個語法的,這里也是很簡單的.
int main()
{
int a = 1;
switch (a)
{
case 1:
printf("%s\n","YES");
break;
case 0:
printf("%s\n", "NO");
break;
default:
printf("%s\n", "選擇錯誤");
break;
}
return 0;
}
switch()的括號的內(nèi)部元素類型 字節(jié)<=4的整型(char int byte short)每一個case后面,除非是特殊業(yè)務(wù)要求,要帶上break;

int main()
{
int a = 1;
switch (a)
{
case 1:
printf("%s\n", "YES");
case 0:
printf("%s\n", "NO");
default:
printf("%s\n", "選擇錯誤");
}
return 0;
}
循環(huán)語句
我們剛剛說了選擇語句,但是這個語句只會執(zhí)行一次。由于我們發(fā)現(xiàn)生活中很多的實際的例子是:同一件事情我們需要完成很多次。那我們怎么做呢?這里就需要循環(huán)語句了,這里的循環(huán)語句三個。
- for
- while
- do while
for
這個格式是for(表達式1; 表達式2; 表達式3),也是很好用的
表達式1 為初始化部分,用于初始化循環(huán)變量的。表達式2 為條件判斷部分,用于判斷循環(huán)時候終止。表達式3 為調(diào)整部分,用于循環(huán)條件的調(diào)整。
int main()
{
for (int i = 0; i < 10; i++)
{
printf("%d ", (i + 1));
}
return 0;
}
這里我們想和大家說一個結(jié)論,條件判斷部分要比調(diào)整部分多上一次,有的選擇題會進行考察.
while
我們也是使用它進行打印1-到10的數(shù)字,這個也是非常簡單的.
int main()
{
int i = 0;
while (i<10)
{
printf("%d ", (i + 1));
i++;
}
return 0;
}
do while
如果說while語句是先進行條件判斷,那么dowhile就是先執(zhí)行代碼,后面再進行條件判斷.
int main()
{
int i = 0;
do{
printf("i: %d\n",i);
} while (i > 0);
return 0;
}
跳出語句
跳出語句算是對循環(huán)語句做一個補充,我們知道,任何一個人都有可能再滿足一定情況下結(jié)束循環(huán),有的人會等到條件完成后結(jié)束,有的人可能中途有添加了另外的條件,此時我們下面的兩個關(guān)鍵子都是為了他們準備的.
contine
contine關(guān)鍵字是跳出本次循環(huán),繼續(xù)下一次的循環(huán).
int main()
{
int i = 0;
while (i < 10)
{
i++;
if (i == 5)
{
continue;
}
printf("i: %d\n", i);
}
return 0;
}
break
break語句更加直接,它是直接結(jié)束循環(huán).
int main()
{
int i = 0;
while (i < 10)
{
i++;
if (i == 5)
{
break;
}
printf("i: %d\n", i);
}
return 0;
}
指針
下面我們談C語言最重要的也是最讓人難以理解的一個內(nèi)容,這我們在后面會重點談.大家記住,所謂的指針我們就認為它是一個地址,它是指向一個事物的標志,這就是指針的簡單理解.根據(jù)計算機主線的根數(shù)不同,指針分為4字節(jié)和8字節(jié),其中32為機器是4字節(jié),64位是8字節(jié).
int main()
{
int a = 10;
int * p = &a; // p 就是一個指針
printf("%d\n", sizeof(p));
return 0;
}
那么我想問的是我們拿到了a的地址,請問我們?nèi)绾慰创齛的內(nèi)容呢?這里可以使用解引用,解引用就是根據(jù)地址找到那一片的空間.
int main()
{
int a = 10;
int * p = &a;
printf("a = %d\n", *p);
*p = 20;
printf("a = %d\n", a);
return 0;
}
這里我想和大家說的,任何指針類型的大小只要機器的位數(shù)確定,那么我們字節(jié)數(shù)也就確定了.
struct Student
{
char name[100]; // 姓名
char sex[10];// 性別
int age; // 年齡
};
int main()
{
printf("char %d\n", sizeof(char*));
printf("int %d\n", sizeof(int*));
printf("double %d\n", sizeof(double*));
printf("struct Student %d\n", sizeof(struct Student*));
return 0;
}
自定義類型
上面我們已經(jīng)知道了自定義類型,也就是int之類的.那么我想問的是如果我們想要描述學生這個屬性,我們應(yīng)該怎么辦?此時我們知道用自定義類型是可以描述的,但是我們有點麻煩,這里C語言提供了一個關(guān)鍵字,我們可以使用它來自己定義類型.
struct
這個一個結(jié)構(gòu)體關(guān)鍵字,我們可以這么做.
struct Student
{
char name[100]; // 姓名
char sex[10];// 性別
int age; // 年齡
};這就是一個結(jié)構(gòu)體,也就是下面的格式
struct 結(jié)構(gòu)體名字
{
// 成員屬性
};這里我們需要記住的是struct 結(jié)構(gòu)體名字才是結(jié)構(gòu)體的類型,大家不要記混了.這里給大家使用一下.
struct Student
{
char name[100]; // 姓名
char sex[10];// 性別
int age; // 年齡
};
int main()
{
struct Student stu = { "張三", "男", 18};
printf("%s %s %d\n", stu.name, stu.sex, stu.age);
return 0;
}
以上就是C語言基礎(chǔ)知識分享續(xù)篇的詳細內(nèi)容,更多關(guān)于C語言基礎(chǔ)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++數(shù)據(jù)結(jié)構(gòu)哈希表詳解
C++標準庫中使用的unordered_map底層實現(xiàn)是哈希表,下面這篇文章主要給大家介紹了關(guān)于C++中使用哈希表(unordered_map)的一些常用操作方法,需要的朋友可以參考下2022-07-07
有關(guān)C++中隨機函數(shù)rand() 和srand() 的用法詳解
下面小編就為大家?guī)硪黄嘘P(guān)C++中隨機函數(shù)rand() 和srand() 的用法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01

