聯合體(共用體)
不同型別的變數共同占用一段記憶體(相互覆蓋),聯合變數任何時刻只有乙個成員存在,節省記憶體
聯合體變數的大小=最大的成員所佔的位元組數
union myvalue{
int x;
int y;
double z;
void main(){
union myvalue d1;
d1.x = 90;
d1.y = 100;
d1.z = 23.8; //最後一次賦值有效
printf("%d,%d,%lf\n",d1.x,d1.y,d1.z);
system("pause");
列舉值預設從 0 開始,往後逐個加 1(遞增)
列舉的值,必須是大括號中的值
enum day
monday = 0,//這裡也可以設定其他整數
tuesday,
wednesday,
thursday,
friday,
saturday,
sunday
常用函式
執行字元/文字行/二進位制i/o的函式
資料型別
輸入輸出
描述字元
getchar
putchar
讀取(寫入)單個字元
文字行gets
scanf
puts
printf
文字行未格式化的輸入(輸出)
格式化的輸入(輸出)
二進位制資料
fread
fwrite
讀取(寫入)二進位制資料
1. 只用於stdin或stdout
2. 隨作為引數的流使用
3. 使用記憶體中的字串而不是流
常用讀寫模式:
"r"(唯讀)
為輸入開啟乙個文字檔案,不存在則失敗
"w"(只寫)
為輸出開啟乙個文字檔案,不存在則新建,存在則刪除後再新建
"a"(追加)
向文字檔案尾部增加資料,不存在則建立,存在則追加
'rb"(唯讀)
為輸入開啟乙個二進位制檔案,不存在則失敗
"wb"(只寫)
為輸入開啟乙個二進位制檔案,不存在則新建,存在則刪除後新建
"ab"(追加)
向二進位制檔案尾部增加資料,不存在則建立,存在則追加
"r+"(讀寫)
為讀寫開啟乙個文字檔案,不存在則失敗
"w+" (讀寫)
為讀寫建立乙個新的文字檔案,不存在則新建,存在則刪除後新建
"a+"(讀寫)
為讀寫開啟乙個文字檔案,不存在則建立,存在則追加
"rb+"(讀寫)
為讀寫開啟乙個二進位制檔案,不存在則失敗
"wb+"(讀寫)
為讀寫建立乙個新的二進位制檔案,不存在則新建,存在則刪除後新建
"ab+"(讀寫)
為讀寫開啟乙個二進位制檔案,不存在則建立,存在則追加
函式名: fopen
功 能: 開啟乙個流,失敗返回null,file並不是指檔案,而是乙個與檔案相關聯的流。
用 法: file *fopen(char *filename, char *type);
函式名: fclose
功 能: 關閉乙個流
用 法: int fclose(file *stream);
函式名: fgets
功 能: 從流中讀取一字串
用 法: char *fgets(char *string, int n, file *stream);
引數:string: 字元型指標,指向儲存讀入資料的緩衝區的位址。
n: 從流中讀入n-1個字元
stream : 指向讀取的流。
返回值:
1. 當n<=0 時返回null,即空指標。
2. 當n=1 時,返回空串"".
3. 如果讀入成功,則返回緩衝區的位址。
4. 如果讀入錯誤或遇到檔案結尾(eof),則返回null.
函式名: fputs
功 能: 送乙個字元到乙個流中
用 法: int fputs(char *string, file *stream);
引數:string為將要寫入的字串,stream為檔案流指標。
返回值:成功返回非負數,失敗返回eof。
**示例:
在c語言中,檔案路徑會被寫作字串形式,但是由於c語言的字串規則中,\字元是轉義字元的引導,所以』\』要寫成』\\』
讀取字串
#define _crt_secure_no_warnings
#include
#include
#include "string.h"
void main() {
char* path = "e:\\files\\friends.txt";
file *fp = fopen(path, "r");
if (fp == null)
printf("檔案讀取失敗");
getchar();
return;
char re[50];
while (fgets(re,50,fp))
printf("%s", re);
fclose(fp);
getchar();
寫入字串
void main() {
char* path = "e:\\files\\friends.txt";
file *fp = fopen(path, "w");
if (fp == null)
printf("檔案寫入失敗");
getchar();
return;
char * wr = "無敵是多麼寂寞!";
fputs(wr, fp);
fclose(fp);
getchar();
計算機的檔案儲存在物理上都是二進位制
,文字檔案和二進位制之分,其實是乙個邏輯之分
,c讀寫文字檔案與二進位制檔案的差別僅僅體現在回車換行符
,寫文字時,每遇到乙個
'\n'
,會將其轉換成
'\r\n'(
回車換行
),讀文字時,每遇到乙個
'\r\n'
,會將其轉換成
'\n'
函式名: fread
功 能: 從乙個流中讀資料fread()函式每次從stream中最多讀取nitems個單元,每個單元大小為size個位元組,將讀取的資料放到buffer;檔案流的位置指標後移size * nitems位元組。
用 法: int fread(void *ptr, int size, int nitems, file *stream);
引數: ptr為接收資料的位址,size為乙個單元的大小,nitems為單元個數,stream為檔案流。
返回值:返回實際讀取的單元個數。如果小於nitems,則可能檔案結束或讀取出錯;如果size或nitems為0,則返回0。
函式名: fwrite
功 能: 寫內容到流中
用 法: int fwrite(void *ptr, int size, int nitems, file *stream);
複製檔案:
void main() {
char* path = "e:\\files\\liuyan.png";
char* path_new = "e:\\files\\liuyan_new.png";
file *fp = fopen(path, "rb");
file *fp_new = fopen(path_new, "wb");
int buf[50];
int len = 0;
while ((len = fread(buf,sizeof(int),50,fp)) != 0)
fwrite(buf, sizeof(int), len, fp_new);
fclose(fp);
fclose(fp_new);
getchar();
函式名: fseek
功 能: 重定位流上的檔案指標
用 法: int fseek(file *stream, long offset, int fromwhere);
引數: 操作的流,偏移量,移動到**
函式名: ftell
功 能: 返回當前檔案指標相對於檔案開頭的位移量
用 法: long ftell(file *stream);
獲取檔案大小:
void main() {
char* path = "e:\\files\\liuyan.png";
file *fp = fopen(path, "rb");
fseek(fp,0,seek_end);
long size = ftell(fp);
printf("%d", size);
fclose(fp);
getchar();
JNI入門之C C 基礎二
指標有型別,位址沒有型別 位址只是開始的位置,型別讀取到什麼位置結束 不同的型別讀取的位元組數不同 空指標的預設值為0 1 什麼是空指標 如果 p 是乙個指標變數,則 p 0 p 0l p 0 p 3 3 p 0 17 p null 中的任何一種賦值操作之後 對於 c 來說還可以是 p void 0...
c c 前五章基礎入門知識
一.c語言資料型別 1.常量 在程式中不能改變其值的量 分為整形常量 實型常量 字元型常量 字串常量四種。實型常量分為單精度 float 與雙精度 double 兩種。整形常量有長整形 long 短整型 short 整型 int 整型與實型可以強制轉換 括號內加int double,或者表示式前 1...
C C 學習筆記 基礎入門系列(五)
第一部分 helloworld的起點 第二部分 初探資料型別 一 第三部分 初探資料型別 二 第四部分 認識運算子 一 第五部分 認識運算子 二 第六部分 理清思路,寫好邏輯結構 一 第七部分 理清思路,寫好邏輯結構 二 第八部分 理清思路,寫好邏輯結構 三 第九部分 資料處理神器之陣列 一 第十部...