網站首頁 編程語言 正文
C語言對于char*和char[]的理解
1、char*和char[]的共同點
都是指針,指向第一個字符所在的地址,C語言指針可以代替數組使用。
指針也是一種變量,只不過它的內存單元中保存的是一種標識其他位置的地址,而地址也是整數,在32位平臺下,就是32位,4個字節
指針的指向是指 指針變量所保存的其他的地址單元中 所存放的數據類型
。
int *ptr; //ptr指針保存的地址所在內存單元中的數據類型是整型 float *p; //這個p指針指向的內存地址存放的元素類型就是浮點型
而不管指向的數據類型是哪種,其實對于指針本身的值永遠是整型,因為它保存的地址就是整數。
2、char*的用法
3、char[]的用法
//char[] char a[20] = "aaa"; char b[] = "bbbbb"; char c[] = {'s','t','r','i','n','g','\0'}; char d[] = {"dddd"}; //一般這樣初始化 char num[20] = {0}; //初始化的目的是為了添加\0,否則\0會跑到莫名其妙的地方導致很多錯誤。 //ASCII碼中0對應的是nul符,即\0。這一行的意義就是給0~19都賦\0。
4、怎么輸出char*地址
雖然指針名就代表的是地址,但在輸出時需要加&,僅限cout。
const char* p = "ppp"; cout<<&p<<endl; //地址 方法一 cout<<(void*)p<<endl;//地址 方法二 cout<<p<<endl; //ppp
const char* a = "ppp"; printf("%p \n", a); //16進制地址,不過 %p的輸出格式并不統一,有的編譯器帶0x前綴,有的不帶 printf("%#X \n", a);//16進制地址,前綴統一是0x printf("%s \n", a); //ppp
5、strlen和sizeof
sizeof | strlen | |
性質 | 運算符 | 函數 |
功能 | 以字節為單位計算操作數占用的內存大小 | 計算字符串的長度(strlen函數遇到\0就會停止下來,返回\0前出現的字符個數,不包括\0) |
時間 | 編譯時 | 運行時 |
參數 | 類型/各種object | const char*\char*\char[] |
返回值 | size_t | size_t |
頭文件 | 運算符沒有頭文件 | string.h |
6、char*和string
區別 | string | char* |
本質 | STL中的一個容器,string封裝了char*。 | 指針 |
內存管理 | 由系統管理,除非系統內存池用完,否則不會出現內存問題 | 棧/堆,如果是堆需要手動釋放 |
7、總結
1、const在*前修飾指定的類型,const在*之后修飾指針。
2、 讀入只能是char [],因為讀入需要明確的地址,注意必須標定長度。
總結:char * s 只是一個保存字符串首地址的指針變量,char a[]是許多連續的內存單元,單元中的元素是char型,char * 和 char a[]具有相同的效果,源于字符串的本質,即給一個字符串地址,便可以操作字符串,但char* 和 char a[]的本質屬性不一樣。
改值還得是char*,因為方便。
Reference
Link
Link
原文鏈接:https://blog.csdn.net/qq_46092061/article/details/128884949
相關推薦
- 2023-07-27 TypeScript類和多態、抽象類、訪問修飾符
- 2023-02-26 C++中的各種容器的使用方法匯總_C 語言
- 2022-10-11 ingress-nginx-url重寫的經驗總結
- 2022-09-16 C語言庫函數getchar()新見解_C 語言
- 2022-08-30 android dialog懸浮和圓角
- 2022-12-08 C語言中-a++和-++a運算順序實例解析_C 語言
- 2022-10-20 Android開發App啟動流程與消息機制詳解_Android
- 2022-04-18 python用plotly實現繪制局部放大圖_python
- 最近更新
-
- 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同步修改后的遠程分支