筆者需要參與一項slam專案的開發,經年不用c++知識已經統統上交給了國家,尤其是現在用python煉丹調參不亦樂乎,怕是一時都改不過來習慣。
故決定速刷c++primer(六)一書,把忘掉的東西撿起來,希望不要和python搞混。
(只是熟悉語法的話看菜鳥教程查表更快,但是為了摸魚匯報進度還是過一下書吧)
一看到迴圈就想到迭代,就想到時間複雜度,就想到資料結構。。。。。。。。
以遞增運算子(++)為例:
int x =5;
y = x++
;//y=5,x=6
z =++x;
//z=6,x=6
字首格式++x
首先對x進行遞增操作,然後將它賦值給其他變數;而字尾格式x++
則是先把x賦值給其他變數,然後再進行遞增操作。顯然,當它不是表示式(即不賦值給其他變數)時,字首與字尾在運算結果上沒有差別(比如for迴圈裡)。
舉個例子:
double x[5]
;double
* pointer = x;
double y1 =
*++pointer;
double y2 =
++*pointer;
double y3 =
*pointer++
;double y4 =
(*pointer)
++;
這裡pointer
指向陣列x
第乙個元素的記憶體位址,*++pointer
表示先對指標進行遞增加一,指向第二個元素位址,然後指標解除取數,所以y1 = 2.3
;
++*pointer
表示先取指標指向的數(第二個元素)(第一步已經改變了指標指向的位址),再對數進行遞增,所以y2 = 3.3
;
*pointer++
表示先對指標進行遞增再解除指標,但是字尾會先給表示式賦值然後才執行遞增操作,所以這裡解除的指標還沒有遞增,y3 = 3.3
;
(*pointer)++
表示對解除指標後的值進行遞增操作,由於上一步指標進行了遞增,所以此時指標指向了第三個元素,賦值給y4後才進行遞增,所以y4 = 3.4
。
操作符含義
<
小於<=
小於等於
==等於
!=不等於
>
大於注意賦值與關係判斷裡等於的區別
對於c風格字串,使用strcmp
函式,但是用string類會更簡單,可以直接string ***
及*** != "sdksl"
操作。
乙個典型結構即:
for
(初始值;測試表示式;更新迴圈測試的值)
for(
int i=
0;i<
5;i++
)
string name =
"angelbaby"
;int i =0;
while
(name[i]
!='\0'
)// process to end of string
while迴圈和for迴圈幾乎等效,一般使用for迴圈。
do
body
while
(test-expression)
;
出口條件的迴圈適用範圍比較小,作為了解。
char ch;
int count =0;
cin.
get(ch)
;// attempt to read a char
while
(cin.
fail()
== false)
// test for eof
cout << endl << count <<
" characters read\n"
;
用cin.fail()
檢測是否輸入到句尾,cin.get(ch)
獲取輸入字元,可輸入空格等特殊符號。
需要迴圈輸入數字時,迴圈條件可以while (cin>>val1>>val2)
型別轉換判斷bool嘛。
例項:大括號
int array1[2]
[4]=
,};
通過array1[i][j]
索引即可使用。
相關練習均已上傳github。
C 基礎語法學習
基本用語區分 解決方案和專案 解決一類問題的方案。比如要建一套房子是不是要有一套解決方案,那是不是要把該方案分解成幾個小專案,如設計,裝修,水電安裝,材料運輸等專案 c 和.net net 是一種平台一種技術,裡面包含著乙個非常大的 庫 可以模擬成 jvm c 是一種語言,我們可以使用c 去呼叫.n...
基礎語法學習
public class hello 類名,變數名,方法名 關鍵字 以 a z a z 開頭 整數型別 byte short int long l 浮點型別 float f double 字元型別 char boolean型別 true 或 false 引用資料型別 類,介面,陣列 二進位制 0b ...
C 基礎語法學習(4)
如果能作為左值則返回引用,例如a b不能作為左值,a b可作為左值,a 不能作為左值,其返回乙個值,是常量,a可作為左指,返回a這個變數 2.當無法修改左運算元的類時,使用全域性變數進行過載,如 和 因為無法修改ostream和istream,只能用友元函式進行過載,若用成員函式,成員變數會作為左值...