FFmpeg 工程之路-基礎(chǔ)開發(fā)概述

章節(jié)

  • 熟練使用 Vim 編輯器
    • Vim 編輯器核心理念、使用竅門
    • Vim 處理模式
    • Vim 常用命令
    • Vim 基礎(chǔ)命令
  • C語(yǔ)言基礎(chǔ)回顧
    • C語(yǔ)言基礎(chǔ)回顧-helloworld
    • 常用基本類型
  • C語(yǔ)言的常量與變量
    • 常量與變量
    • C語(yǔ)言內(nèi)存管理
  • C語(yǔ)言指針 與 數(shù)組
    • C語(yǔ)言指針
    • 數(shù)組
    • C 指針程序demo->testpoint.c
  • C 自定義類型
    • 結(jié)構(gòu)體
    • 枚舉類型
  • C語(yǔ)言文件操作
    • 文件操作流程
    • C語(yǔ)言操作文件實(shí)操->testfile.c
  • Linux/Mac C語(yǔ)言編譯器
    • 常用 gcc/clang 命令參數(shù)
  • 感想
    • 關(guān)于技術(shù)提升
    • 關(guān)于發(fā)展

1.熟練使用 Vim 編輯器

1.1 Vim 編輯器核心理念、使用竅門

核心理念: 雙手盡量與鍵盤接觸,這樣我們的思路才不會(huì)被打斷,集中精力寫代碼,思路不被打斷。
使用竅門: 勤學(xué)多練

1.2 Vim 處理模式

命令行模式

拷貝、刪除、粘貼等,通過(guò) i/a 等鍵切換到編輯模式

編輯模式

編輯字符,通過(guò)Esc鍵進(jìn)行切換

1.3 Vim 常用命令

創(chuàng)建文件

vim filename

保存文件

:w

關(guān)閉文件

:q

切換vim模式為編輯模式

i

退出并保存

:wq

不保存

:q!

1.4 Vim 基礎(chǔ)命令

  • 拷貝/粘貼一行 yy/p
  • 刪除一行 dd
  • 拷貝/粘貼 一個(gè)詞 yw/p
  • 刪除一個(gè)次 dw
  • 光標(biāo)移動(dòng)-左下上右 h / j / k / l ,mac os 下直接按 上下左右
  • 跳到文件頭 gg
  • 跳到文件尾 G
  • 移動(dòng)到行首 ^
  • 移動(dòng)到行尾 $
  • 按單詞移動(dòng):向前 w/ 2w/ ,向后 b/ 2b
    命令模式下編輯的內(nèi)容 存儲(chǔ)在緩沖區(qū)中,并沒(méi)有寫入到文件當(dāng)中

2、C語(yǔ)言基礎(chǔ)回顧

2.1 C語(yǔ)言基礎(chǔ)回顧-helloworld

編寫helloworld.c源代碼

//import 庫(kù)函數(shù)
#include <stdio.h>

//程序運(yùn)行主入口 argc 輸入一些參數(shù)、字符數(shù)組每一項(xiàng)都是一個(gè)命令參數(shù),這個(gè)是行參
int main(int argc,char *argv[]){
   printf("hello world!\n");
   return 0;
}

注意:還給老師的c語(yǔ)言還是拿起來(lái)吧,重新站到鄙視鏈的頂端,嘿嘿。
編譯 helloworld.c

clang -g -o helloworld helloworld.c 
-g 代表編譯時(shí)輸出debug 信息、
-o 代表源代碼編譯完成之后輸出的文件、

運(yùn)行 helloworld.c

BOFENGLIU-MB0:learn20181024 mark$ ./helloworld

運(yùn)行結(jié)果

output

2.2 常用基本類型

  • short 占2個(gè)字節(jié)
  • int 占4個(gè)字節(jié)
  • long 占4個(gè)字節(jié)
  • float 占4個(gè)字節(jié)
  • double 占 4 個(gè)字節(jié)
  • char 占1個(gè)字節(jié)
  • void

擴(kuò)充 helloworld.c 源代碼

//import 庫(kù)函數(shù)
#include <stdio.h>

//程序運(yùn)行主入口 argc 輸入一些參數(shù)、字符數(shù)組每一項(xiàng)都是一個(gè)命令參數(shù),這個(gè)是行參
int main(int argc,char *argv[]){
   int a = 100;
   double b = 5.8;
   char c = 'Y';

   printf("a=%d,b=%f,c=%c\n",a,b,c);
   printf("hello world!\n");
   return 0;
}

運(yùn)行結(jié)果

output 結(jié)果

3、C語(yǔ)言的常量與變量

3.1 常量與變量

int a = 0;//變量,可以再賦值
const int len = 256; //常量定義

3.2 c語(yǔ)言內(nèi)存管理

c語(yǔ)言內(nèi)存管理

4、c語(yǔ)言指針 與 數(shù)組

4.1 c語(yǔ)言指針

指針是c語(yǔ)言的靈魂、所謂指針就是 內(nèi)存地址 void* 、char*
拿到指針就可以操作(獲取、更改)指針指向的內(nèi)存地址的value、
即 地址 就是 指針,void* 表示任意類型指針

c語(yǔ)言指針

實(shí)用比較多的是一級(jí)指針。

4.2 數(shù)組

數(shù)組是內(nèi)存當(dāng)中連續(xù)的同一類型數(shù)據(jù)的一塊空間,char[2] 根據(jù)數(shù)組的序號(hào)找到目標(biāo)索引數(shù)據(jù)。int arr[10] 根據(jù)數(shù)組的一個(gè)數(shù)據(jù)可以獲取到數(shù)組當(dāng)前元素的前一個(gè)、后一個(gè)元素。

數(shù)組

4.3 c 指針程序demo->testpoint.c

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char* argv[]){
   //1.聲明指針變量a,個(gè)人更傾向于使用 [類型*] 變量名,而不擅長(zhǎng)使用[類型] *變量名,前者更加直觀,含義即 指向某類型變量的指針
   int* a;
   int* b;

   a = (int*)malloc(sizeof(int));//在堆內(nèi)存中分配int類型數(shù)據(jù)占內(nèi)存大小的空間,并將內(nèi)存空間首地址賦給a
   b = (int*)malloc(sizeof(int));//同上

   *a = 1;
   *b = 2;

   printf("addr of a: %p,a saved addr: %p,a points value %d\n",&a,a,*a);//指針的指針,即存放指針的空間地址,指針變量存儲(chǔ)的地址值,指針指向的內(nèi)存區(qū)域存儲(chǔ)的vlaue
   printf("addr of b: %p,b saved addr: %p,b points value %d\n",&b,b,*b);//同上

   return 0;
}

運(yùn)行結(jié)果

output結(jié)果

指向數(shù)組變量的指針

5.c 自定義類型

定義復(fù)雜類型去覆蓋原始類型不能實(shí)現(xiàn)的需求,即自定義類型

5.1 結(jié)構(gòu)體

struct  st {
    int a;
    int b;
}

在函數(shù)體里使用結(jié)構(gòu)體->teststruct.c

#include <stdio.h>
struct user {
   int sex;
   int age;
};

int main(int argc,char* argv[]) {
   struct user user;
   user.sex = 0;
   user.age = 10;

   printf("st user  content is :%d,%d\n",user.sex,user.age);
   return 0;
}

運(yùn)行結(jié)果

運(yùn)行結(jié)果

5.2 枚舉類型

enum color_em {
    red_color = 0,
    green_color, //自動(dòng) + 1 為 1
    yellow_color,//自動(dòng) + 1 為 2
    black_color, //自動(dòng) + 1 為 3
};

在函數(shù)體里使用枚舉

#include <stdio.h>

enum color_em {
    red_color = 0,
    green_color, //自動(dòng) + 1 為 1
    yellow_color,//自動(dòng) + 1 為 2
    black_color, //自動(dòng) + 1 為 3
};

int main(int argc,char* argv[]){
   enum color_em colorEm;
   //把red_color賦值給 枚舉類型(enum)
   colorEm = black_color;
   printf("The color is: %d\n",colorEm);
   return 0;
}

運(yùn)行結(jié)果

output 結(jié)果

注意:struct 與 enum 在定義之時(shí)的語(yǔ)法差異,struct 各 filed ; 隔開、enum 各filed , 隔開。

6.文件操作

6.1 文件操作流程

文件操作流程
  • 文件類型 FILE* file = 使用指針指向文件
  • 打開文件 FILE* fopen(path,mode) = fopen函數(shù)調(diào)用返回文件句柄
  • 關(guān)閉文件 fclose(FILE*) = 銷毀文件句柄,釋放資源

6.2 c語(yǔ)言操作文件實(shí)操->testfile.c

#include<stdio.h>

int main(int argc,char* argv[]){
   //1.聲明文件句柄
   FILE* file;
   //2.聲明空buff,用來(lái)讀取文件中的內(nèi)容
   char buf[1024] =  {0, };
   //3.內(nèi)容寫入文件的方式為末尾追加,則游標(biāo)是處于文件末尾位置的
   file = fopen("hello.txt","a+");
   //4.["寫入的文本內(nèi)容",一個(gè)字符占用n個(gè)字節(jié),被寫入文本的字符數(shù),文本寫入的file目的地]
   fwrite("hello,bofeng!",1,13,file);
   //5.將文件末尾游標(biāo)復(fù)位到文件最開頭的位置,否則 將文件中內(nèi)容讀取到空buf時(shí),buf中數(shù)據(jù)為空
   rewind(file);
   //6.將file中內(nèi)容讀取到buf 中,1表示一個(gè)字符占1個(gè)字節(jié),13表示讀取從游標(biāo)開始的n個(gè)字符,因程序已經(jīng)運(yùn)行過(guò)若干遍,所以可以讀取 n*13個(gè)字符
   fread(buf,1,26,file);
   //7.關(guān)閉文件,釋放資源很重要,要知道在c/c++中充斥著各種手動(dòng)close resource 的操作
   fclose(file);
   //8.輸出buf中內(nèi)容
   printf("The file content is: %s\n",buf);
   return 0;
}

運(yùn)行結(jié)果

output 結(jié)果

7.Linux/Mac c語(yǔ)言編譯器

  • MacOS 操作系統(tǒng)上的c語(yǔ)言編譯器是CLANG;
  • Linux 操作系統(tǒng)上的c語(yǔ)言編譯器是GCC

7.1 常用 gcc/clang 命令參數(shù)如下所示:

gcc/clang 常用命令參數(shù)

8.感想

今天的思考有兩點(diǎn):
關(guān)于技術(shù)提升

如果有幸我的文章你讀到了這里,你或許會(huì)有疑問(wèn),為什么這么簡(jiǎn)單的問(wèn)題都要記錄?很簡(jiǎn)單:不積跬步無(wú)以至千里。

關(guān)于發(fā)展

以發(fā)展的眼光看身邊的人、身邊的事、摒棄個(gè)人經(jīng)驗(yàn)主義、甚至是群體經(jīng)驗(yàn)主義。說(shuō)個(gè)有意思的故事:郭沫若是家喻戶曉的作家,可你是否知道小時(shí)候的他字寫的非常潦草、完全看不出有以后會(huì)成為作家的跡象。身邊長(zhǎng)輩都說(shuō)這孩子以后肯定不是握筆的料。可事實(shí)是他確實(shí)成為了作家,并且主編了《中國(guó)史稿》和《甲骨文合集
所以個(gè)人經(jīng)驗(yàn)主義在某些方面并不可信、甚至是群體經(jīng)驗(yàn)主義也不太可信,比如說(shuō)三歲看小、七歲看老

關(guān)于公眾號(hào)

精進(jìn)!
道友們,你們好。早前個(gè)人就有開設(shè)公眾號(hào)的念想,今年10月終于開搞了。
我的個(gè)人的 訂閱號(hào)--T客來(lái)了;
平時(shí)自己會(huì)總結(jié)一些后端開發(fā)相關(guān)的技術(shù);
最近也迷上了音視頻開發(fā)相關(guān)技術(shù);

技術(shù)分享包括:

  • 1.FFmpeg 工程實(shí)戰(zhàn)、
  • 2.數(shù)據(jù)庫(kù) MySQL原理與實(shí)戰(zhàn)、
  • 3.Redis中間件、
  • 4.Nginx、Java并發(fā)編程、
  • 5.Go語(yǔ)言方面的技術(shù)知識(shí)與實(shí)操;
  • 6.有趣味的心理學(xué)


    T客來(lái)了

微信掃碼就可以添加哦~

注意:此視頻整理自慕課網(wǎng)實(shí)戰(zhàn)課程-FFmpeg音視頻核心技術(shù)精講與實(shí)戰(zhàn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容