C/C++之学习笔记
生活随笔
收集整理的這篇文章主要介紹了
C/C++之学习笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【C語言的Static inline 函數的作用】 【printf打印格式】 %x ?打印十六進制 %d 打印十進制 %b 打印二進制 %c 打印字符 %s 打印字符串 %f 打印單精度float %lf 打印雙精度double ? 【關于C++中的類型轉換】 dynamic_cast: 通常在基類和派生類之間轉換時使用,把一個派生類轉換為基類使用這個轉換,run-time cast const_cast:?轉換是去掉const變量的const,?主要針對const和volatile的轉換. static_cast: 一般的轉換,類似于C/C++里面的強制類型轉換。no run-time check.通常,如果你不知道該用哪個,就用這個。 reinterpret_cast: 用于進行沒有任何關聯之間的轉換,比如一個字符指針轉換為一個整形數。 ? 【位域問題】 #include?<stdio.h> int main(void) { struct bs{ unsigned?a:1;? ?//a?變量取值為0,1 unsigned?b:3;??//b?變量取值為0到2的3次方-1 unsigned?c:4;??//c?變量取值為0到2的4次方-1 } bit, *pbit; bit.a = 1; bit.b = 7; bit.c = 15; printf("%d,%d,%d \n",bit.a,bit.b,bit.c); pbit = &bit; pbit->a = 0; pbit->b &= 3; pbit->c |= 1; printf("%d,%d,%d \n",pbit->a,pbit->b,pbit->c); //printf("the aaa struct sizeof: %d\n", sizeof(data)); return 0; } ? ? 【位移運算】 << 左移運算 #include ?<stdio.h> ? int ?main(?void) { ????????????????size_t a = 2; ????????????????printf( ?"a<<3 = %d\n",a<<3); ???????????????? ?return?0; } ? 結果: a*(2*2*2) = 16 ? >> 右移運算 ? ? ?#include?<stdio.h> ? ? ? ??int?main(?void) ? ? ?{ ????????????????size_t a = 16; ????????????????printf(?"a>>3 = %d\n",a>>3); ?????????????????return?0; ? ? ?} ? 結果:a/(2*2*2) = 2 ? 【避免重復的編譯的宏定義】 #ifndef _TEST_HEAD_H_ #define?_TEST_HEAD_H_ 代碼體...... #endif 【C和C++混合編譯的宏定義】 #ifdef __cplusplus extern "C" { #endif 代碼體...... #ifdef __cplusplus } #endif 【C語言注釋標準】 單行: /**?The length of the activequeues array?*/? 多行: /**?The length of the activequeues array? *?? ?The length of the activequeues array? */ 【宏定義】 (1)、Windows編譯器判斷 #ifdef WIN32 /* If we're on win32, then file descriptors are not nice low densely packed integers. ?Instead, they are pointer-like windows handles, and we want to use a hashtable instead of an array to map fds to events. */ #define EVMAP_USE_HT #endif (2)、宏定義判斷 #ifdef EVMAP_USE_HT #include "ht-internal.h" struct event_map_entry; HT_HEAD(event_io_map, event_map_entry); #else #define event_io_map event_signal_map #endif ? 【位運算】 ??1. and運算 ? ? ??and運算通常用于二進制取位操作,例如一個數 and 1的結果就是取二進制的最末位。 這可以用來判斷一個整數的奇偶,二進制的最末位為0表示該數為偶數,最末位為1表示該數為奇數。 相同位的兩個數字都為1,則為1;若有一個不為1,則為0?! ?0111 11100 (&;或者and) ---------------- 00100
?????2. or運算
or運算通常用于二進制特定位上的無條件賦值,例如一個數or 1的結果就是把二進制最末位強行變成1。 如果需要把二進制最末位變成0,對這個數or 1之后再減一就可以了,其實際意義就是把這個數強行變成最接近的偶數。 相同位只要一個為1即為1。 00111 11100 (|或者or) ---------------- 11111 3. xor運算 異或的符號是⊕。 xor運算通常用于對二進制的特定一位進行取反操作,因為異或可以這樣定義:0和1異或0都不變,異或1則取反。 xor運算的逆運算是它本身,也就是說兩次異或同一個數最后結果不變,即(a xor b) xor b = a。 xor運算可以用于簡單的加密,比如我想對我MM說1314520,但怕別人知道,于是雙方約定拿我的生日19880516作為密鑰。 1314520 xor 19880516 = 20665500,我就把20665500告訴MM。MM再次計算20665500 xor 19880516的值,得到1314520,于是她就明白了我的企圖。 相同位不同則為1,相同則為0。 00111 11100 (^或者xor) ---------------- 11011 ? 【進制】 ? ? ??9、C語言中使用16進制 ? ??????至于宏定義為什么喜歡定義成?0xf 什么的,還有經??吹蕉x成0x00000001 這種形式的。 首先計算機運算全是通過2進制進行的,所以把16進制(0x?代表這個數是16進制的)轉換成2進制,那么f 就是 1111。 c語言基礎教程書上都有這么一課,就是位運算,"|","&", 等等操作符。當表現一個對象有幾種屬性時候,它可以并列擁有幾種屬性,比如一件衣服,他可以是藍色(定義藍色為 0001 即0x1),紅色(定義紅色為0010,即0x2), 黑色(定義為0100,即0x4),白色(1000,0x8) 所以當你看到這件衣服時候,有個表示告訴你他的屬性是0xf,即1111,就表示4種顏色它全具備,如果屬性是0xa,即1001,那表示它具有 藍色 和 白色 2種屬性。 這么講比較通俗點吧。。。。至于宏定義為什么喜歡定義成?0xf 什么的,還有經常看到定義成0x00000001 這種形式的。 首先計算機運算全是通過2進制進行的,所以把16進制(0x?代表這個數是16進制的)轉換成2進制,那么f 就是 1111。 c語言基礎教程書上都有這么一課,就是位運算,"|","&", 等等操作符。當表現一個對象有幾種屬性時候,它可以并列擁有幾種屬性,比如一件衣服,他可以是藍色(定義藍色為 0001 即0x1),紅色(定義紅色為0010,即0x2), 黑色(定義為0100,即0x4),白色(1000,0x8) 所以當你看到這件衣服時候,有個表示告訴你他的屬性是0xf,即1111,就表示4種顏色它全具備,如果屬性是0xa,即1001,那表示它具有 藍色 和 白色 2種屬性。 這么講比較通俗點吧。。。。 ? 【鏈表】 鏈表(Linked list)是一種常見的基礎數據結構,是一種線性表,但是并不會按線性的順序存儲數據,而是在每一個節點里存到下一個節點的指針(Pointer)。 ? ? ?基本原理: ? ?1、 單鏈表:每一個節點里存到下一個節點的指針(Pointer) 2、 循環鏈表: 循環鏈表是與單鏈表一樣,是一種鏈式的存儲結構,所不同的是,循環鏈表的最后一個結點的指針是指向該循環鏈表的第一個結點或者表頭結點,從而構成一個環形的鏈。 ? 循環鏈表的運算與單鏈表的運算基本一致。所不同的有以下幾點: 1、在建立一個循環鏈表時,必須使其最后一個結點的指針指向表頭結點,而不是象單鏈表那樣置為NULL。此種情況還使用于在最后一個結點后插入一個新的結點。 2、在判斷是否到表尾時,是判斷該結點鏈域的值是否是表頭結點,當鏈域值等于表頭指針時,說明已到表尾。而非象單鏈表那樣判斷鏈域值是否為NULL。 3、 雙向鏈表: ?雙向鏈表其實是單鏈表的改進。 當我們對單鏈表進行操作時,有時你要對某個結點的直接前驅進行操作時,又必須從表頭開始查找。這是由單鏈表結點的結構所限制的。因為單鏈表每個結點只有一個存儲直接后繼結點地址的鏈域,那么能不能定義一個既有存儲直接后繼結點地址的鏈域,又有存儲直接前驅結點地址的鏈域的這樣一個雙鏈域結點結構呢?這就是雙向鏈表。 在雙向鏈表中,結點除含有數據域外,還有兩個鏈域,一個存儲直接后繼結點地址,一般稱之為右鏈域;一個存儲直接前驅結點地址,一般稱之為左鏈域。 設計實現: ? 【?!?/strong> 基本原理:后進先出的規則 1 順序棧:使用數組實現順序存儲數據 2 鏈棧:使用指針實現鏈式存儲數據 設計實現: ######################################################################################## 【隊列】 ######################################################################################## 【內存分配】? ? ??realloc
extern void *realloc(void *mem_address, unsigned int newsize); 語法:指針名=(數據類型*)realloc(要改變內存大小的指針名,新的大小)。//新的大小一定要大于原來的大小,不然的話會導致數據丟失! 頭文件:#include <stdlib.h> 有些編譯器需要#include <malloc.h>,在TC2.0中可以使用alloc.h頭文件 功能:先判斷當前的指針是否有足夠的連續空間,如果有,擴大mem_address指向的地址,并且將mem_address返回,如果空間不夠,先按照newsize指定的大小分配空間,將原有數據從頭到尾拷貝到新分配的內存區域,而后釋放原來mem_address所指內存區域,同時返回新分配的內存區域的首地址。即重新分配存儲器塊的地址。 返回值:如果重新分配成功則返回指向被分配內存的指針,否則返回空指針NULL。 注意:這里原始內存中的數據還是保持不變的。當內存不再使用時,應使用free()函數將內存塊釋放。 calloc是一個ISO C函數 函數名: calloc 函數原型:void *calloc(unsigned n, unsigned size); 功 能: 在內存的動態存儲區中分配n個長度為size的連續空間,函數返回一個指向分配起始地址的指針;如果分配不成功,返回NULL。 跟malloc的區別: calloc在動態分配完內存后,自動初始化該內存空間為零,而malloc不初始化,里邊數據是隨機的垃圾數據。轉載于:https://www.cnblogs.com/ht-927/p/4726514.html
總結
以上是生活随笔為你收集整理的C/C++之学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 乌鲁木齐融创玖玺台楼盘地址在哪里?
- 下一篇: HDU 5389 Zero Escap