C 學習筆記day16 標準C語言

2021-08-19 04:55:13 字數 3590 閱讀 5316

動態分配記憶體:

前一天的筆記裡記錄了申請動態記憶體的一種方法,通過malloc(int);函式。

今天再介紹兩種申請分配動態記憶體的方法。

1、calloc(int,int);

calloc(10,sizeof(int));

calloc函式也可以動態申請記憶體。上述例子中表示,申請10個int型別所佔位元組大小的記憶體空間,所以一共是需要40byte。

除了引數不同,通過這函式申請的記憶體空間,會被全部初始化成0.

2、realloc();

這個函式的作用是對已經動態分配好的記憶體進行調整。

如果用這個函式去對乙個動態分配好的10byte記憶體進行擴充至20byte,擴充的10byte記憶體空間是連續在之前申請好的那塊10byte記憶體的後面。假設原先申請好的動態記憶體空間之後的空間已經被使用,那麼這個函式會在記憶體裡找一塊連續的20byte空間,然後把原先10byte的記憶體中的資料拷貝過來,再銷毀原先的10byte空間。

這樣的做法是比較消耗資源的,所以盡量不要使用這個函式。

檔案

c語言中將檔案看作兩種,一種是文字檔案,一種是二進位制檔案。

所以對文字的操作也分為兩種:

1、第一種是通過二進位制方式來讀寫檔案,由於文字檔案也可以看作是二進位制的檔案,所以這種方法,也可以對二進位制檔案操作。

2、第二種是通過文字方式來讀寫檔案,只能讀寫文字檔案。

操作檔案的函式:

fopen();

用於開啟乙個檔案。有兩個引數,第乙個引數表示了檔案的位置,第二個引數表示了檔案的開啟方式。

該函式呼叫結束後,會返回乙個檔案指標型別(file*)的返回值。

檔案位置的表示方式可以採用絕對路徑,也可以採用相對路徑。

檔案開啟方式分為以下幾種:

「w」:只能對檔案進行寫入,不能讀取。如果路徑上檔案不存在,將會建立乙個該路徑上的檔案。如果路徑上的檔案存在,它會清空檔案內原來的內容。

「w+」:比上述方式多了可讀取的操作。

「r」:只能對檔案讀取,不能寫入。如果路徑上的檔案不存在,將會返回乙個null。如果存在將會從檔案的開頭開始讀取。

「r+」:比上述方式,多了可寫入的操作。

「a」:只能對檔案寫入。如果路徑上的檔案不存在,則會建立乙個檔案。如果存在,也不會清空它原先的內容,而是會在原先的內容後繼續追加寫入。

「a+」:比上述方式,多了讀取的操作。

「b」:二進位制形式。這個選項可以和上述任意乙個選項一起使用,表示用二進位制的方式開啟檔案。如果不加,就是以文字形式開啟檔案。

fclose

fclose(file);

用fopen函式開啟乙個檔案,對檔案的操作結束之後一定要關閉檔案。因為開啟檔案的時候fopen的內部實現會為這次操作申請動態記憶體,如果不用fclose關閉的話,會造成記憶體洩漏。

該函式只有乙個引數,就是fopen函式返回的檔案指標。

fwrite

fwrite(,int,int,file*)

fwrite(num,sizeof(int),10,p_file);

對檔案執行寫入操作的函式。

這個函式有四個引數:

第乙個引數,是乙個記憶體位址,表示寫入檔案的內容在記憶體空間的首位元組位址。

第二個引數,是乙個整型引數,表示這次寫入檔案的單位。

第三個引數,是乙個整型引數,表示要連續寫入多少個單位的內容

第四個引數,是檔案指標,表示寫入哪個檔案。

fread

fread(num,sizeof(int),10,p_file);

對檔案執行讀取操作的函式。

函式也有4個引數,很fwrite一致

下面通過乙個例子來演示上述函式,**如下:

#include

#include

#include

typedef

structpeople;

int main(int argc,char** argv);

people one = ;

int size = 0;

file* p_wfile = fopen("people.txt","ab");

file* p_rfile = fopen("people.txt","rb");

if(p_wfile)

fclose(p_wfile);

p_wfile = null;

}if(p_rfile)

fclose(p_rfile);

p_rfile = null;

}return

0;}

上述**,建立了乙個結構體,向檔案寫入乙個結構體型別,然後再讀取出來。用的都是二進位制方式來操作的。

在二進位制方式下讀寫檔案,是要按照讀寫內容本身的型別來做的,因為每個型別的位元組數不同,一旦寫入和讀取用的型別不同時,讀取出來的檔案是不能用的。

下面再介紹兩個函式,是用於文字檔案讀寫的。

fprintf&fscanf

fprintf(file*,」佔位符」,);

這個函式和printf函式是很像的,只比它多乙個引數,用於指明把內容寫入到哪個檔案。

fscanf(file*,」佔位符」,);

這個函式和scanf函式很像,多餘的引數是用來表示從哪個檔案裡讀取資料的。

下面用一段**演示一下:

#include

#include

#include

int main(int argc,char** argv);

int number = 0;

file* p_file = fopen("wenben.txt","w");

file* p_rfile = fopen("wenben.txt","r");

if(p_file)

fclose(p_file);

p_file = null;

if(p_rfile)

} return

0;}

將乙個整型陣列通過文字寫入的方式寫入到文字檔案。

再用文字的方式讀取出來。

位置指標

當開啟乙個檔案的時候,計算機會為它用乙個整數型別的值來記錄下一次讀寫開始的位置。叫做位置指標。

位置指標,一定是在兩個位元組中間。

每當向檔案獲取n個位元組或者寫入n個位元組的時候,位置指標都會向後移動n。

ftell&rewind&fseek

test.txt

abcdefghijklmn

------------------------

#include

int main(int argc,char** argv)

------------------------ab

adml

在測試檔案中放置了一串英文本元,通過用函式調整當前位置指標的位置,會列印出預期中的字元。

Python學習筆記 Day16

今日大綱 一 物件導向的組合 組合 給乙個類的物件封裝乙個屬性,這個屬性就是另乙個類的物件 組合的意義 讓乙個類的物件和另乙個類的物件產生關係,讓乙個類和另乙個類產生關係 如何組合 1 在類1中定義乙個方法,類1的物件1在執行這個方法的時候能增加乙個屬性,屬性值就是類2的物件2 2 物件1執行這個方...

力扣學習筆記day16

請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點。傳入函式的唯一引數為 要被刪除的節點 現有乙個鍊錶 head 4,5,1,9 它可以表示為 輸入 head 4,5,1,9 node 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4...

day16 學習總結

今天學習了可變引數和遞迴。老師還留了一道練習題,寫乙個計算器出來,嘗試琢磨了許久,還是沒有做出來。這也是我基礎薄弱的緣故,明天繼續研究。加油加油!下面是知識點 package com.liangwenwei.方法 public class 可變引數 public void test int x,in...