網站首頁 編程語言 正文
指針是什么?
指針是c語言中的一個重要概念,也是C語言的一個重要的特色,正確而靈活地運用它,可以使程序簡潔,緊湊,高效,每一個學習和使用c語言的人,都應當深入了解地學習和掌握指針,可以說,不掌握指針就是沒有掌握C的精華也可以說
指針是C語言的靈魂(doge)
由于通過地址能找到所需的變量單元,可以說,地址指向變量單元,打個比方,一個房間的門口掛了一個房間號2008,這個2008就是房間的地址,或者說,2008"指向"該房間.因此,將地址形象化地稱為“指針”。意思是通過它能找到以它為地址的內存單元!
指針變量 ?
使用指針變量的例子
例? 通過指針變量訪問整型變量
int main() { int a = 100, b = 10;//定義整型變量a,b并初始化 int* p1, * p2; //定義指向整型數據的指針變量p1,p2; p1 = &a; //把變量a的地址賦給指針變量p1 p2 = &b; //把變量a的地址賦給指針變量p2 printf("a=%d,b=%d\n", a, b);//輸出變量a和b的值 printf("*p1=%d,*p2=%d\n", *p1, *p2); }
運行結果:
在開頭處定義了兩個指針變量p1和p2。但此時他們并未指向任何一個變量,只是提供兩個指針變量,規定他們可以指向整型變量,至于指向哪一個整型變量,要在程序中指定.。程序第五第六行的作用就是使p1指向a,使p2指向b,此時p1的值為&a(即a的地址),p2的值為&b(即為b的地址)
*注意:定義指針變量時,左側應有類型名,否則就不是定義指針變量.
例如:
通過指針引用數組
所謂數組元素的指針就是數組元素的地址
可以用一個指針變量指向一個數組元素。例如
int arr[10]={1,3,5,7,9,11,13,15,17,19}; //定義a為包含10個整型的數組 int *p; //定義p為指向整型變量的指針變量 p=&a[0]; //把a[0]元素的地址賦給指針變量p
&數組名vs數組名
int arr[10];
我們知道arr是數組名,數組名表示數組收元素的地址。
那么問題來了 &arr數組名到底是什么呢??
不如我們來段代碼吧!
由此可以得出數組名和&數組名打印的地址是一樣的。
我們再來看一段代碼!
根據代碼我們發現,其實&arr和arr,雖然值是一樣的,但是意義應該不一樣
實際上&arr表示的是數組的地址而不是數組首元素的地址。
數組的地址+1 跳過整個數組的大小,所以&arr+1相對于&arr的差值是40.
野指針
概念:野指針就是指針指向的位置是不可知的,(隨機性的丶不正確的丶沒有明確限制的)
野指針成因
1.指針未初始化
2.指針越界訪問
如何避免野指針
- 指針初始化
- 小心指針越界
- 指針指向空間釋放即使置NULL
- 避免返回局部變量的地址
- 指針使用之前檢查有效性
指針運算
小時候我們就知道1+1等于幾 那我問你如果是指針加1的話 加的是那個數字嗎 ?
下面來看一段代碼:
這里我們可以發現p跟p+1相差1
這里c是多少呢 ?
16進制的C的10進制是12,所以q+1和q相差4?
p是整型指針相當于sizeof(int)=4
q是字符型指針相當于sizeof(char)=1;
以上就是我歸納指針的一些小結 如果能幫助友友們
原文鏈接:https://blog.csdn.net/weixin_59796310/article/details/122704310
相關推薦
- 2022-10-19 C#如何提取經緯度文件中的經緯度數據_C#教程
- 2023-08-30 Git忽略已經提交過一次文件Git忽略文件
- 2023-10-15 MVCC和BufferPool緩存機制
- 2023-03-25 在?git?中取消?__pycache__?文件的方法_相關技巧
- 2022-10-11 Linux下恢復應用程序被刪除的文件(lsof)
- 2024-01-15 spring boot jpa 執行test測試,發現執行未報錯但是事務會自動回滾
- 2022-07-29 linux目錄管理方法介紹_linux shell
- 2024-03-09 【Redis】什么是緩存擊穿,如何預防緩存擊穿?
- 最近更新
-
- 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同步修改后的遠程分支