C++ 基礎 (8)
- 複習
如何呼叫庫函式(別人寫好的函式)
1) 標頭檔案:包含指定的標頭檔案,標頭檔案主要包含此函式的宣告
2) 函式名字:函式名字必須和標頭檔案宣告的名字一樣
字串常用處理函式:
1.字串輸入 gets() fgets()
char buff[100]
gets(buf) //和 scanf的區別是可以有空格
// 最多隻能輸入99個
fgets(buf,100,stdin);
2.字串的輸出 puts() fputs()
(第一個引數是指標 第二個引數是file,這裡使用標準輸出
3.獲取字串長度: strlen (遇到\0就結束 sizeof不會!
4.字串拷貝: strcpy(直接拷貝 strncpy(多了一個長度
5.字串追加(連線): strcat() strncat()
6.格式化輸出字串: printf() sprint()
printf(“a = %d\n”,10);
“a = 10\n”;
sprint(buf,…
// 輸出到字元陣列buf中
7.格式化輸入字串 scanf(“%d”,&a)
char buf[] = “10”
sscanf(buf,”%d”,&a
8.字串查詢(需要使用返回值
strchr() // 查詢字元
strstr() // 查詢字串
9.字串切割 strtok()
strtok(buf,”,”) //切割的時候會把原字串破壞
strtok(NULL,”,”) //第二次切割的時候要把指標指向NULL,才能繼續切割
自定義函式
02 作業講解
03 return和exit區別
return的作用,終止函式
1、 return主函式(main),程式結束
2、 return其他函式,程式不結束
//puts 和 printf的區別: puts會在結尾新增\n ,printf不會 puts只能輸出字串,而printf卻可以進行標準化的輸出
int I = 10;
printf(“%d”,i)
int I = 10;
puts(“%d”,i) //報錯
exit(int )的作用是結束整個程式 //結束程序
相當於把return放到main函式中退出的操作
4 宣告和定義
實現一個函式,功能和strlen一樣的, int my_strlen(char str[])
(圖中把函式放到main函式後面了)
編譯時候C編譯器會報警告,C++會出錯,所以應該把宣告放到前面
只要在呼叫的前面宣告就行了,聲明瞭好多次的情況
5 分檔案(多檔案)程式設計
1、按功能來分 xxx.h xxx.c
2、有一個主函式測試 自定義函式 main.c
(建立了倆檔案
gcc *.c 出現真香警告
為了防止警告 應該加入宣告
(這樣就不報錯了
想一下 如果我每次要使用都要宣告是不是太麻煩了,
如果有三個.c 那是不是要在三個裡面都重複的寫宣告程式碼
於是引入標頭檔案
標頭檔案的功能是什麼
(預處理)
結論:多個檔案中,不能出現同名函式(static除外)
xxx.c:
函式的定義
xxx.h:
.c中函式的宣告
2、個主函式測試自定義函式 main.c
同一個檔案如何防止標頭檔案重複包含(包含多次,只有一次生效):
1、 #pragma once
2、
#ifndef _MYSTRLEN_H
#define _MYSTRLEN_H
//函式宣告
#endif
include的原理: #include "a.h" ,則會把整個 a.h 檔案都copy到 b.c 的開頭
xxx.c:
函式的定義
xxx.h
.c中函式的宣告
1、 有一個主函式測試自定義函式 main.c
多個檔案中 不能出現同名函式(static除外
同一個檔案如何防止標頭檔案重複包含(包含多次,只有一次生效)
1.#pragma once
2.define
07 指標概述
1、 記憶體,以一個位元組為單位分配記憶體
2、 每個位元組的記憶體都有標號,這個標號就是地址,也叫指標
3、 地址需要儲存 32位編譯器用32位(4位元組)存此地址 64位編譯器用64位(8位元組)存此地址
1、 房間分配號碼,記憶體分配標號,編碼
2、 根據房號找到對應的房間,根據地址找到對應的記憶體,定址
08 指標補充
09 指標的定義和使用
10 指標變數和指標變數所指向的記憶體
11 上午知識點複習
12 指標練習
13 野指標
野指標:這個指標變數儲存了一個沒有意義(非法)的地址
- 只有定義後的變數,此變數的地址才是合法地址
- 野指標就是儲存沒有意義地址的指標變數
- 操作野指標變數本身不會有任何問題
- 操作野指標所指向的記憶體才導致報錯誤
14 空指標
15 指標大小
16 多級指標
總結:
- 指標變數也是一個變數,是變數就可以賦值
- 指標指向誰,就把誰的地址賦值給指標
- *p操作的是指標所指向的記憶體
18 []不是陣列專屬
19 萬能指標和指標步長
1、 不可以定義void型別的普通變數 不能確定型別 編譯器就不知道分配多大空間
void a;
可以定義void *變數(因為大小是編譯器確定的
void * 指標也叫萬能指標
void *可以指向任何型別的變數(型別匹配)
void *p = NULL;
int a = 10;
p = &a;
printf(“*p = %d\n”,*p); //*p操作指標所指向記憶體
這裡會報錯,
或者這樣寫,也是會報錯的
void *可以指向任何型別的變數,使用指標所指向的記憶體時,最好轉換為它v恩深的指標型別
答案: void *p指向了a了 操作*p的時候不知道應該操作多少位元組的記憶體
所以就會報錯了
使用 void *p 的時候只儲存了 4個位元組中的一個位元組
int *指向int型別,操作記憶體時,操作4位元組
char *指向char型別,操作記憶體時,操作1位元組
int型別4位元組
char型別 1位元組
注意:
1、 指標的加法,不是傳提供的假髮
2、 步長由指標指向的資料型別決定
20 const修飾符的指標
注意加以區分:
21 陣列名
22 指向陣列首元素的指標
23_通過指標加減訪問陣列元素
24 作業