C 未明基礎知識總結(一)

2021-07-03 03:32:10 字數 4057 閱讀 2385

其實吧,斷斷續續學了一點c++,但是其實以前學的時候就迷迷糊糊的。也沒怎麼搞懂陣列和指標的意思。後來才知道元原來陣列名就是陣列首位址指標。這文章是對以前未明知識點的一點總結。其實寫的還是比較亂的。

#include

int main()

printf("%d\n",input);

}

c字串是乙個字元陣列,以』\0』結尾,如:char city = 「harbin」,等價於char city =

cin是預設以』\0』為結束標誌的,但是如果要輸入的city是「new york」,則就要用cin.getline(city,30,』\n』); 這表示當讀入29個或遇到換行符時就停止讀入,最後乙個字元被』\0』替代。可以簡寫成cin.getline(city,30);

常見的是strlen。

unsigned

intstrlen(char s)

可知strlen函式將c字串末尾的』\0』給去掉了。

此外還有一些常見的函式,比如strcpy(char s1, const char s2),

strcat(char s1, const char s2)。

這個有時候還是很用的。主要是 int atoi/atof/atol(char s),將字串轉換成對應的int/float/long值。

對應的有 void itoa(int value, char s, int radix)將數字轉換為字串

char s1 = "65";

char s2 = "4";

cout

char s3[15];

itoa(100,s3,16); //顯示64,即6x16+4 = 100

string型別,常見的string的成員函式有.at, .clear(), .erase(int index, int n),此外.length(), .size()是一樣的。length()是size()的別名

c_str()返回乙個c字串。(就是將string型別的字串變成以』\0』結尾的字元陣列唄)。

在中有sort,random_shuffle分別可以對陣列進行排序和隨機洗牌。而 min_element和max_element分別返回陣列中的最小和最大元素的指標。

int *min = min_element(list,list+6);

cout

<<"the min value is"

<<*min《堆區申請的記憶體用new,銷毀時用delete,delete只能釋放new申請的記憶體空間,當然如果是new分配給陣列的空間釋放就用deletelist;

eg:int x = 10;

int *p = &x;

delete p; //這是錯誤的,因為x沒有用new申請空間

記憶體洩漏的一種情況是給乙個已指向初始化數的指標再重新指向乙個新的空間。

eg:

int *p = new

int;

*p = 45;

p = new

int;

此時存「45」的空間將無法再訪問,即所謂的記憶體洩漏。

通過指標訪問指向物件的成員函式有2中方法。顯然第一種是通過指標前面加」*」得到該物件,再用」.」訪問其成員唄~

第二種直接用」->」

eg:

string *p = new

string("abcdefg");

cout

<<(*p).substr(0,3)strcat(char *s1, const

char *s2)//將s2的字串拼接到s1上,因此s2肯定是不能改變的,但是s1會變,因此這樣的書寫方式有助於程式的更好理解,同時也增加了安全性。

2 . 那為什麼有時候我們看到 const int&a,這樣宣告引數的呢?這個其實是類似的。就是說,如果寫成 const int*a, 那麼傳入引數是乙個指向int型的指標,並且這個指標所指向的內容不能在函式中改變。a是乙個指標。在呼叫該函式時要傳入乙個指標。

但當寫成 const int&a時,此處的a就是乙個int的值。並且這個a不能改變。

3 . c/c++不能返回陣列,所以一般情況下是多設定乙個引數作為返回的陣列就可以了。說實話這有點麻煩啊。。其他很多語言都可以返回陣列。。比如:c#

template

//模板字首

t maxvalue(const t1&value1, const t2&value2);

模板類就是

;在stack.cpp中

template

t stack::peek()const

//這裡的const表示此函式中不改變資料域的值。

根據模板類,可以建立不同的物件,通過給t指定具體型別即成為不同的類。

建立int 型的stack

stackintstack;

for( int i =0; i < 10; i++)

intstack.push(i);

其實就是長度可變的陣列

一維陣列的向量表示

vectordeck(52);

二維向量表示

vector

簡單的說就是定義輸入/輸入流物件,通過「物件.方法()」來進行操作。

注意:ofstream是輸出,就是通過控制台輸出到文字上,而 ifstream是輸入,對於控制台來說是輸入,那不就是通過文字輸入到控制台中嗎?(可能講的不準確,但是這是乙個比較有效的記憶方法)

//從控制台輸出到文字。

#include

ofstream output;

output.open("score.txt"); //這兩距等價於ofstream output("score.txt");

output<<"john"

<<" "

<<95

<#include

int main()

}

這種寫法有乙個缺陷就是如果最後乙個number後面有空格,則最後乙個數字會加2遍,解決辦法是寫成

while(input>>number)

input.fail()

string filename;

cin>>filename;

ifstream input(filename.c_str());//值得注意的是,標註c++中,傳入的必須是c字串,而不是string物件。

getline就是用來讀入包含空格的字串,get/put讀寫單個字元

這裡的getline是fstream裡面的。

原型是:getline(ifstream& input, string s, char delimitchar)

而在cin中的getline原型是getline(char array, int size, char delimitchar)

eg:

while(!input.eof())

//以下是核心部分

char ch = input.get();

while(!input.eof())

input.close();

output.close();

ios::binary

i . 檔案分為文字檔案和二進位制檔案,前者可被編輯器處理,後者必須由計算機陳故鄉讀取。

ii. 用」<<」和put寫入文字檔案,」>>」 ,get和getline讀取文字檔案。但二進位制檔案的讀寫,必須用read和write

fstream binaryio("city.dat",ios::out | ios:binary);

string s = "beijing";

binaryio.write(s.c_str(), size());

binaryio.close();

read的語法:

streamobject.read(char *address, int size)

C 基礎知識總結(一)

c 程式以.cpp 作為副檔名。c 標準輸入輸出庫的標頭檔案是 iostream 在程式中使用 include 包含標頭檔案 c 使用命名空間 using namespace std 物件的定義及初始化 int z 0 等價int z 0 用關鍵字 const 修飾的識別符號是一類特殊的常量,成為符...

c 基礎知識總結

建構函式 1.建構函式沒有返回值,函式名就是類名 2.建構函式可以過載,以滿足對物件不同引數的需求。實參決定了呼叫哪個建構函式 3.建構函式在定義物件的時候由系統自動呼叫。且每個物件只呼叫一次。4.無參建構函式和全預設建構函式都是預設建構函式,且這倆只能存在乙個 二義性問題 5.建構函式不可以用co...

c 基礎知識總結 一 菜鳥篇

在使用vs的過程中,有幾個技巧的總結,對於控制台程式,乙個解決方案裡面可以包含多個專案,所以常見的設子啟動項有兩種方法,一種就是點選右鍵,設定為啟動項,第二種就是右鍵點選解決方案,然後選擇屬性,再選擇當前選定內容即可,然後當你選中哪個專案就會執行哪個專案。net與c 分別表示的是什麼?net指的是....