C++数据的一些注意事项
1 不同類型
1.1 靜態變量
分類:
分為靜態全局變量和靜態局部變量
作用域:
需要注意靜態全局變量也僅僅是在本文件中可用,除非加extern關鍵字。
內存分配位置
在全局區分配空間,初始值為0。
1.2 局部非靜態變量
內存分配位置:
內存分配在棧空間,棧空間初始值為隨機值。
作用域:
作用域為當前塊(大括號)中
1.3 常量
1.3.1 宏常量
通常定義在文件頭部
語法
#define 加常量名加常量值? ?(不可修改)
1.3.2 const
語法
const? 常量類型? 常量名 = 常量值; (不可更改)
1.3.3?const和define的區別
編譯器處理方式不同:
對于#define, 編譯器會在預處理階段把所有宏替換成所定義的東西, 并不是給其分配內存.
類型和安全檢查不同:
#define僅僅作替換, 不會做類型檢查. 而const定義的常量有具體的數據類型, 編譯階段也會進行類型檢查.
存儲方式不同:
#define定義的宏在每次使用的過程中都會進行一次替換, 且每次替換都會重新分配一次內存, const定義的常量會在內存中分配內存.
const節省空間:
如以下例子:
#define PI 3.14159 //常量宏 const doulbe Pi = 3.14159; //此時并未將Pi放入ROM中 ...... double i = Pi; //此時為Pi分配內存,以后不再分配! double I = PI; //編譯期間進行宏替換,分配內存 double j = Pi; //沒有內存分配 double J = PI; //再進行宏替換,又一次分配內存!- const效率更高
- 宏替換只作替換,不做計算,不做表達式求解
2 數據類型
2.1 sizeof關鍵字
用法
sizeof(數據類型/變量),返回所占字節數。
2.2 實型(浮點型)
2.2.1 float(單精度)
占4字節? ? ?7位有效數字? ? ? ? ? 聲明float型最好在值后面加f(如float f1 = 3.14f? ?如果不加, 編譯器會默認其是double型, 然后再轉換成float)
2.2.2 double(雙精度)
占8字節? ? ?15-16位有效數字
2.2.3 printf打印
比如在printf中打印實型變量:
%-30.4f其中“-”表示左對齊, “30”表示至少要有三十個字符的長度,“.4”表示精確度保留小數4位,f表示實型。如果存在“e”表示用科學計數法打印。
2.3 字符型
表示單個字符的變量類型, 一定要用單引號表示一個字符 (如char ch = ‘a’,而不可以為char ch = ‘abc’,也不可以為char ch = “a”)。
2.4 字符串
- C風格字符串? ? ? ? char 變量名[] = "字符串值"
- C++風格字符串? ? string 變量名 = "字符串值"
2.5 數組
初始化
如果數組未全部初始化,剩下的數默認為0,注意,數組名為常量類型,不可以賦值.
數組名稱用途
- 可以獲取數組首地址
- 可以統計數組占用內存
- 可以用于數組長度求解, sizeof(數組名) / sizeof(數組名[0])可以算出數組元素個數, 但是要注意, 數組名作為參數傳遞到另一個函數中的形參時, 會退化為指向數組首地址的指針.
二維數組
初始化可以省略行數(不寫行數的前提是不能只有一個聲明,比如:int a[][4];,必須直接給數組賦值,比如:int a[][4] = {1, 2, 3, 4, 5, 6, 7, 8},這樣默認就是一個a[2][4]),但是不能省略列數
2.6 枚舉
2.6.1 enum
2.6.2 enum class
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的C++数据的一些注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql存储过程触发器_MySQL存储
- 下一篇: c++ 写x64汇编 5参数_怀念9年前