主頁 > 後端開發 > 初學編程,如何玩轉C語言?C語言中最重要的知識獻上!

初學編程,如何玩轉C語言?C語言中最重要的知識獻上!

2021-02-06 06:14:07 後端開發

 

 一、C語言的指標
  1.指標說明

  指標是包含另一變數的地址變數,

  (1)int *p

  p是一個指標,指向一個整形數,

  (2)int *p()

  p是一個函式,該函式回傳一個指向整數的指標,

  (3)int (*p)()

  p是一個指標,該指標指向一個函式,這個函式回傳一個整數,

  (4)int *p[]

  p是一個陣列,該陣列的每一個元素是指向整數的指標C語言中的幾個重要概念C語言中的幾個重要概念,

  (5)int (*p)[]

  p是一個指標,該指標指向一個陣列,這個陣列的每一個元素是一個整數,

  (6)int *(*p)()

  p是一個指標,該指標指向一個函式,這個函式回傳一個指向整數的指標,

  2.指標的初始化(賦地址)

  (1)通過符號&取變數(包括結構變數、陣列第一個元素)的地址賦給指標;

  (2)把陣列名賦給指標;

  (3)把函式名賦給指向函式的指標;

  (4)動態分配記憶體

  例:struct c{double r,i;};

  struct c *p;

  p=(struct c *)malloc(sizeof(struct c));

  3.指標與陣列、函式的關系

  (1)對于一維陣列 int a[i] 或指標 int *a

  a+i 指向 a[i]

  (2)對于字串 char s[i] 或指標 char *s

  s+i 指向第 i個字符 s[i]

  (3)對于二維陣列int a[i][j]

  *a+j 指向 a[0][j]

  *(a+i) 指向 a[i][0]

  *(a+i)+j 指向 a[i][j]

  例:對于 a[2][3]={1,2,3,4,5,6,}; 有 *(*(a+1)+1)=5;

  (4)對于字串陣列char p[i][j] 或字符型指標陣列char *p[i]

  *p+j 指向第 0個字串的第 j個字符

  *(p+i) 指向第 i個字串的第 0個字符

  *(p+i)+j 指向第 i個字串的第 j個字符

  例:對于 *p[]={"ABC","DEF"}; 有 *(*(p+1)+1)='E';

  例:對于 char p[][3]={"ABC","DEF"}; 有 *(*(p+1)+1)='E';

  (5)對于指標陣列int *a[i]

  a[i] 指向 變數i

  即 *a[i]=變數i 或 a[i]=&變數i

  (6)對于結構struct XY

  {int x;int *y}*p;

  p是指向結構XY的指標

  (*p).x 或 p->x 是表示 x 的內容

  (*p).y 或 p->y 是表示指標 y 的值(地址)

  *(*p).y 或 *p->y 是表示 y 所指的內容

  &(*p).x 或 &p->x 是表示 x 的地址

  (7)指向函式的指標

  對于 void func(char *str)

  {…}; //定義了一個函式

  void (*p)(char*);//定義了一個函式指標

  p=func; //讓指標指向函式

  則(*p)("…"); //用指標p可以呼叫函式func

  (8)指向多個不同函式的指標陣列

  對于void function_1() {…};

  …

  void function_4() {…}; //定義了四個函式

  typedef void(*menu_fcn)();//定義了指向函式的指標

  menu_fcn command[4]; //定義了指標陣列

  command[0]=function_1;

  …

  command[3]=function_4; //讓指標陣列指向四個函式

  則command[0](); //用指標陣列中的一個元素呼叫一個函式

  4.指標的分類

  (1)近指標(near):

  近指標為16位指標,它只含有地址的偏移量部分,近指標用于不超過64K 位元組的單個資料段或代碼段,在微、小和中編譯模式下產生的資料指標是近指標(預設狀態);在微、小和中編譯模式下產生的碼指標(指向函式的指標)是近指標(預設狀態),

  (2)遠指標(far)

  遠指標為32位指標,指標的段地址和偏移量都在指標內,可用于任意編譯模式,每次使用遠指標時都要重裝段暫存器,遠指標可尋址的目標不能超過64K ,因為遠指標增減運算時,段地址不參與運算,在緊湊、大和巨模式下編譯產生的資料指標是遠指標(預設狀態)C語言中的幾個重要概念計算機考試,

  (3)巨指標(huge)

  巨指標為32位指標,指標的段地址和偏移量都在指標內,可用于任意編譯模式,遠指標尋址的目標可以超過64K ,巨指標是規則化的指標,

  5.指標的轉換

  (1)遠指標轉換成巨指標

  使用以下函式

  void normalize(void far * * p)

  {

  *p=(void far *)(((long)*p&0xffff000f)+(((long)*p&0x0000fff00<<12));

  }

  6.指標的使用

  (1)將浮點數轉換成二進制數

  float ff=16.5;

  unsigned char *cc;

  (float*)cc=&ff;

  //此時cc的內容為"00008441"

  //即cc第一個位元組=0;第二個位元組=0;第三個位元組=0x84;第四個位元組=0x41;

  (2)將二進制數轉換成浮點數

  float ff;

  unsigned char *cc;

  cc=(unsigned char*)malloc(4);

  cc=(unsigned char*)&ff;

  *(cc+0)=0;

  *(cc+1)=0;

  *(cc+2)=0x84;

  *(cc+3)=0x41;

  //此時ff=16.5

  free(cc);

  二、C 語言的函式
  1.用戶自定義函式格式

  型別 函式名(形式引數表)

  引數說明

  {

  ……

  }

  2.函式的呼叫方式

  (1)傳值方式

  ①傳給被呼叫函式的是整型、長整型、浮點型或雙精度型變數,被呼叫的函式得定義相應的變數為形參,

  ②傳給被呼叫函式的是結構變數,被呼叫函式得定義結構變數為形參,

  ③傳給被呼叫函式的是結構變數的成員,被呼叫函式得定義與該成員同類的變數為形參,

  (2)傳址方式

  ①傳給被呼叫函式的是變數的地址C語言中的幾個重要概念C語言中的幾個重要概念,被呼叫函式得定義指標變數為形參,

  ②傳給被呼叫函式的是陣列的地址即陣列名,被呼叫的函式得定義陣列或指標變數為形參,

  ③傳給被呼叫函式的是函式的地址即函式名稱,被呼叫函式得定義指向函式的指標變數為形參,

  ④傳給被呼叫函式的是結構的地址,被呼叫函式得定義結構指標為形參,

  3.函式呼叫(傳值方式)結果的回傳

  (1)回傳的是數值

  要求被呼叫的函式型別與接識訓傳值的.變數型別相同,

  (2)回傳的是指標

  要求被呼叫的函式是指標函式,其指向的型別與接收的指標變數指向型別相同,

  (3)不回傳任何值

  被呼叫的函式是void型

  三、C 語言的資訊壓縮法
  1.使用位運算子

  要把 5個資料的值壓縮到一個字(16位)中,假定其中三個(f1、f2、f3)是標記(真或偽)各占一位;第四個是叫type的整數,其取值范圍為 1到12,需要 4位的存盤器;最后一個叫作index 的整數,其取值范圍為從 0到 500,需占 9位C語言中的幾個重要概念計算機考試,為此定義一個整型變數:unsigned int packed_data,可包含此 5個值,下圖是位域分配,

  typeindex

  f1f2f3┌──┐┌───────┐

  ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐

  └┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘

  把 n的 4個低位的值置入packed_data 的type域中,用下面的陳述句:

  packed_data=https://www.cnblogs.com/zuishuaideou/p/(packed_data & ~(0xf<<9))|((n&0xf)<<9);

  其中位或符號|左邊是將type域置 0,右邊是取 n的低 4位后左移9 位到type域中,

  從packed_data 的type域中提取數值并把它賦予 n的陳述句是:

  n=(packed_data>>9) & 0xf;

  2.使用位域結構

  (1)定義一個叫做 packed_struct的結構,含有 5個成員

  struct packed_struct

  {

  unsigned int f1:1

  unsigned int f2:1;

  unsigned int f3:1;

  unsigned int type:4;

  unsigned int index:9;

  };

  (注:在結構中還可以放入普通資料型別,如char c;等)

  (2)定義一個變數

  struct packed_struct packed_data;

  (3)把packed_data 的type 域置于n的低位,用陳述句

  packed_data.type=n;

  (4)從packed_data 中提取type域(按要求,把它移到低位),并把它賦予 n,用陳述句

  n=packed_data.type;

  3.使用聯合

  (1)一個無符號整型數與一個結構(其中包含許多無符號變數)共用一存盤區,當無符號整型數被賦值后,可通過結構變數獲得各位的值,

  例如,定義一個聯合

  union {

  unsigned equi;

  struct {

  unsigned boot :1;

  unsigned copr :1;

  unsigned rsize:2;

  unsigned vmode:2;

  unsigned dnum :2;

  unsigned:1;

  unsigned cnum :3;

  unsigned gnum :1;

  unsigned:1;

  unsigned pnum :2;

  }beq;

  }eq;

  當呼叫BIOS INT 11H中斷后,將AX的值賦給eq.equi,就可以從eq.beq.boot得到PC機有無系統盤的資訊;從eq.beq.copr得到PC機有無浮點運算部件的資訊,......

  (2)兩個結構共享同一存盤區域

  例如:union REGS

  struct WORDREGS{unsigned int ax,bx,cx,dx,si,di,cflag,flags};

  struct BYTEREGS{unsigned char al,ah,bl,bh,cl,ch,dl,dh};

  union REGS {struct WORDREGS x;struct BYTEREGS h;}

  四 、位運算
  1.數的編碼—補碼

  (1).正數的補碼與原碼同,

  (2).負數的補碼為

  ①第一位(符號位)為 1;

  ②剩余原碼位數逐位取反;

  ③然后對整個數加 1,

  2.位邏輯運算的特殊用途

  (1).取一個數中的某些位元組

  例a & 0x00ff得到a的低位元組,a & 0xff00得到a的高位元組,

  ┌─┬───┬────┬────────┐

  │數│十進制│十六進制│補碼│

  ├─┼───┼────┼────────┤

  │ a││0x2cac│0010110010101100│

  │││0x00ff│0000000011111111│

  ├─┴───┼────┼────────┤

  │ 按位與 │ ox00ac │0000000010101100│

  │ 運算結果 │││

  └─────┴────┴────────┘

  (2).將一個數的某些特定位置1

  例a | 0x0f使a的低4位改為1,

  ┌─┬───┬────┬────────┐

  │數││十六進制│補碼│

  ├─┼───┼────┼────────┤

  │a ││0x0030│0000000000110000│

  │││0x000f│0000000000001111│

  ├─┴───┼────┼────────┤

  │按位或││0000000000111111│

  │運算結果│││

  └─────┴────┴────────┘

  (3).將某數特定位置翻轉

  例a ^ 0x000f使a的低4位翻轉(0變1;1變0),

  ┌─┬───┬────┬────────┐

  │數││十六進制│補碼│

  ├─┼───┼────┼────────┤

  │a ││ 0x007a │0000000001111010│

  │││ 0x000f │0000000000001111│

  ├─┴───┼────┼────────┤

  │ 按位異或 ││0000000001110101│

  │ 運算結果 │││

  └─────┴────┴────────┘

  (4)將a的右起第2位反向變化(1變0,0變1)

  a=a^0x02;//(0x02=00000010),異或的意義是"同值為0"

  (5).將兩個數(整型數)的值互換

  例a=a^b;b=b^a;a=a^b; //三步使得a、b的值互換

  3.移位運算的特殊用途

  (1).將某數除以2(右移1位)

  例a>>2 使得a被4除

  ①對于 signed a=-8,a>>2

  a=-8

  ┌─┬─┬─┬─┬─┬─┬─┬─┐

  │1 │1 │1 │1 │1 │0 │0 │0 │

  └─┴─┴─┴─┴─┴─┴─┴─┘

  ├─┬─┐──>└───┐

  ┌─┬─┬─┬─┬─┬─┬─┬─┐

  │1 │1 │1 │1 │1 │1 │1 │0 │

  └─┴─┴─┴─┴─┴─┴─┴─┘

  a=-2

  ②對于unsigned a=248,a>>2

  a=248

  ┌─┬─┬─┬─┬─┬─┬─┬─┐

  │1 │1 │1 │1 │1 │0 │0 │0 │

  └─┴─┴─┴─┴─┴─┴─┴─┘

  └───┐ ──> └───┐

  ┌─┬─┬─┬─┬─┬─┬─┬─┐

  │0 │0 │1 │1 │1 │1 │1 │0 │

  └─┴─┴─┴─┴─┴─┴─┴─┘

  補0──┴─┘a=62

  (2).將某數乘以2(左移1位)

  注左移時signed 與unsigned變數的情況一樣,均要補0,

  (3)將x的右起第n(n>=0)位置0

  x&=~(1《n); 若x是long,則x&=~((long)1《n);

  (4)將x的右起第n(n>=0)位置1

  x|=1《n;

  若x是長整形數則 x|=(long)1《n;

  五、C語言訪問CPU暫存器的方法
  1.使用聯合REGS,和函式 int86() / int86x() / intr()

  REGS是用來在進行 DOS軟中斷呼叫時向各個暫存器傳輸資料或從各個暫存器取出回傳值,

  union REGS 示意圖

  structstruct

  WORDREGSBYTEREGS

  ┌ ┌───────┬──────┐──┬── ┐

  │ ││ al │ 1 byte│

  │ │ax├──────┤──┴─ 2 bytes

  │ ││ ah │ │

  │ ├───────┼──────┤───── ┘

  │ ││ bl │

  │ │bx├──────┤

  │ ││ bh │

  │ ├───────┼──────┤

  │ ││ cl │

  │ │cx├──────┤

  │ ││ ch │

  │ ├───────┼──────┤

  │ ││ dl │

  │ │dx├──────┤

  │ ││ dh │

  union regs├───────┼──────┤

  │ │││

  │ │si││

  │ │││

  │ ├───────┤│

  │ │││

  │ │di││

  │ │││

  │ ├───────┤│

  │ │││

  │ │cflag ││

  │ │││

  │ ├───────┤│

  │ │││

  │ │flags ││

  │ │││

  └ └───────┴──────┘

  │x兩個結構變數h│

  └──共享同一存盤域──┘

  2.使用偽變數和函式geninterrupt()

  Turbo C 允許使用偽變數直接訪問相應的8086暫存器,偽變數的型別有兩種,

  ① unsigned int : _AX、 _BX、 _CX、 _DX、 _CS、 _DS、 _SS、 _ES、 _SP、 _BP、 _DI、 _SI

  ② unsigned char: _AL、 _AH、 _BL、 _BH、 _CL、 _CH、 _DL、 _DH

  六、C語言使用記憶體和暫存器的方法
  1.段和段暫存器

  CS用來存放代碼段的段地址;DS用來存放全域變數和靜態變數所在段(資料段)的段地址;SS用來存放區域變數,引數所在段(堆疊)的段地址, 此外,還有堆段,是動態分配的記憶體,

  2.微模式編譯時段的使用情況

  只有一個段,從底往高依此裝入代碼,靜態變數和全域變數,堆,從高往低裝入堆疊,

  3.小模式編譯時段的使用情況

  資料、堆疊和近堆共用一個段,代碼用一個段,還有一個遠堆(用far指標存取),

  4.中模式編譯時段的使用情況

  中模式有多個代碼段,其余與小模式一樣,函式指標用far指標,

  5.緊湊模式編譯時段的使用情況

  代碼,靜態資料,堆疊,堆(只有遠堆)各有自己的段,靜態資料的總量不得超過64K

  6.大模式編譯時段的使用情況

  靜態資料,堆,堆疊的分配與緊湊模式一樣;代碼段的分配與中模式一樣,資料指標和函式指標都是遠指標C語言中的幾個重要概念計算機考試,靜態資料的總量不得超過64K,

  7.巨模式編譯時段的使用情況

  來自不同源檔案的代碼放在不同的段內,來自不同源檔案的靜態資料也放在不同的段內,只有堆疊是合在一起的,

  8.運行庫函式分配的記憶體:

  常規記憶體區

  遠堆(資料段之外) 用_fmalloc()分配,得到32位指標

  ├─────────┤

  64│堆(未使用的記憶體)│用malloc()分配,得到16位的位移地址

  KB├─────────┤

  數│堆疊(區域變數)│

  據├─────────┤

  段│全域和靜態變數│

  ├─────────┤

  七、用C語言寫中斷服務程式(如果中斷服務程式不牽涉到中斷鏈以及 DOS和其本身的重入問題,) ---Turbo C
  1.函式型別為interrupt 的中斷服務程式定義如下:

  #include

  void interrupt 函式名(bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flags);

  unsigned int bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flags;

  2.得先保留原中斷函式地址

  void interrupt (*保留函式名)( );

  保留函式名=getvect(0x中斷號);

  3.在main函式中用自定義的中斷服務程式替換原來的程式

  setvect(0x中斷號,函式名);

  4.在main函式中激活自定義的中斷服務程式

  (1)先設定要用到的暫存器的值(用偽變數),

  (2)geninterrupt(0x中斷號);

  若替換的是計時中斷程式,因PC機內的計時器每秒產生18.2次中斷,則每秒自動執行18.2次新的中斷程式,

  5.事后得將原中斷函式地址裝回向量表中

  setvect(0x中斷號,保留函式名);

另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~

分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)

歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!


免費學習書籍:


免費學習資料:

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/257007.html

標籤:C

上一篇:C/C++編程筆記:如何在C++中標記字串?四種方法告訴你

下一篇:快取設計的好,服務基本不會倒

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more