網站首頁 編程語言 正文
前言
在VS編譯器里有release和debug兩種形式,debug包含調試信息,release不包含調試信息,并會對程序進行優化
int main()
{
int i = 0;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (i = 0; i <= 12; i++)
{
arr[i] = 0;
printf("hehe\n");
}
return 0;
}
運行這個程序,結果是死循環打印hehe,為什么呢?
我們看內存
在循環到第13次時,把存儲變量i的地方改為0,i<=12仍成立,形成死循環
這是debug下出現的情況,但是如果是release的配置下,就不會出現上面死循環的情況,原因在下面這個圖里
在debug配置下,儲存i變量的地址比儲存arr數組的地址高,可能會越界到i的地址導致死循環
在release配置下,儲存i變量的地址比儲存arr數組的地址低,不會出現越界到i導致死循環
(如果你非寫一個死循環那就真的死循環了,release優化沒有那么萬能)
數據類型介紹
類型 | ?大小(單位為字節) |
---|---|
char (字符數據類型) | 1 |
short (短整型) | 2 |
int (整形) | 4 |
long (長整型) | 4或8 |
long long (更長的整形) | 8 |
float (單精度浮點數) | 4 |
double (雙精度浮點數) | 8 |
long long是在C99增加的
long的大小和環境有關,32位平臺上是4個字節,64位平臺上是8個字節
這些都是C中內置的數據類型
類型的意義:
使用這個類型開辟內存空間的大小(大小決定了使用范圍)
看待內存空間的視角
1就是不同類型可以開辟不同大小的內存空間
對于2,看下圖理解
類型的基本歸類
整型家族
char
? ?unsigned char
? ?signed char
short
? ?unsigned short [int]
? ?signed short [int]
int
? ?unsigned int
? ?signed int
long
? ?unsigned long [int]
? ?signed long [int]
在C99后又加了long long
long long
? ?unsigned long long [int]
? ?signed long long [int]
這些都是整型家族里的數據類型,都分有符號和無符號類型
為什么說字符數據類型也是整型呢?
因為字符的本質其實是ASCII 碼值,是整型,所以劃分到整型家族
一般我們都默認不加unsigned或signed的默認為是有符號的,但是char就有點特殊
char里有三個
- char
- signed char
- unsigned char
signed char就是有符號的char,unsigned char就是無符號的char,但是什么都不加的char是有符號的還是無符號的標準是未定義的,取決于編譯器的實現,跟編譯器有關
其他都不加的int,short,long等都是默認為有符號的
那么為什么會有unsigned和signed之分呢?
因為生活中本來就有很多數據是沒有負數的,比如身高,體重,長度
也有很多數據是有正負之分的,比如溫度,放出或吸收熱量
所以我們需要用unsigned和signed來區分是否有正負之分
舉例子
int a = 10;
a是整型,有符號的整型,一個整型4個字節,即32個bit
0000 0000 0000 0000 0000 0000 0000 1010 (原碼)
int a = -10;
1000 0000 0000 0000 0000 0000 0000 1010(原碼)
符號位上,0表示正數,1表示負數,而且符號位不算有效位,只表示正負
有符號的int可以存 (-231)~(231-1)大小的數字
unsigned int a = -10;
1111 1111 1111 1111 1111 1111 0110(-10的補碼)
無符號的int可以存0~232大小的數
因此,對于有正負的數,我們就用有符號的signed
對于沒有正負之分的數,我們就用無符號的unsigned
浮點數家族
(只要表示小數就可以使用浮點型)
?float
?double
float精度低,存儲的數值范圍較小
double精度高,存儲的數值范圍較大
構造類型
數組類型
例如:
? ? ? ? ? ? ? ? ? ? ? 類型
int arr1[5]; ? ?——> ?int [5]
int arr2[8]; ? ?——> ?int [8]
char arr3[5] ? ?——> ?char [5]
結構體類型
struct
枚舉類型
enum
聯合類型
union
指針類型
int *pi;
char *pc;
float* pf;
void* pv;
空類型
void 表示空類型(無類型)
通常應用于函數的返回類型、函數的參數、指針類型
舉一個例子
void test(void);
//第一個void 表示函數不會返回值
//第二個void 表示函數不需要傳任何參數
void*
//void用于指針類型,以后會詳細講解
原文鏈接:https://blog.csdn.net/iqrmshrt/article/details/124936663
相關推薦
- 2022-07-22 create-react-app腳手架核心源碼之/packages/react-scripts解讀
- 2023-03-16 python中split()函數的用法詳解_python
- 2023-01-15 RUST異步流處理方法詳細講解_Rust語言
- 2022-06-02 C++的智能指針你真的了解嗎_C 語言
- 2022-01-27 layui中iframe彈出層事件給父級填入數據
- 2022-04-15 ASP.NET?Core基礎之中間件_基礎應用
- 2022-09-15 c++中的字節序與符號位的問題_C 語言
- 2022-04-24 C語言時間函數之strftime()詳解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支