網站首頁 編程語言 正文
一、* 的意義
- 在指針聲明時,* 號表示所聲明的變量為指針
- 在指針使用時,* 號表示取指針所指向的內存空間中的值
如下:
int i = 0; int j = 0; int* p = &i; //指針聲明 j = *p; //取值
變量 p 保存著變量 i 的內存地址,即:p <--> &i *p <--> i
* 號類似一把鑰匙,通過這把鑰匙可以打開內存,讀取內存中的值。
下面看一個指針的使用示例:
#include <stdio.h> int main() { int i = 0; int* pI; char* pC; float* pF; pI = &i; *pI = 10; printf("%p, %p, %d\n", pI, &i, i); printf("%d, %d, %p\n", sizeof(int*), sizeof(pI), &pI); printf("%d, %d, %p\n", sizeof(char*), sizeof(pC), &pC); printf("%d, %d, %p\n", sizeof(float*), sizeof(pF), &pF); return 0; }
輸出結果如下:
所有 32 位系統上的指針變量占用內存大小都為 4 個字節。
二、傳值調用與傳址調用
- 指針是變量,因此可以聲明指針參數
- 當一個函數體內部需要改變實參的值,則需要使用指針參數
- 函數調用時實參值將復制到形參
- 指針適用于復雜數據類型作為參數的函數中
下面看一個利用指針交換變量的代碼:
#include <stdio.h> int swap(int* a, int* b) { int c = *a; *a = *b; *b = c; } int main() { int aa = 1; int bb = 2; printf("aa = %d, bb = %d\n", aa, bb); swap(&aa, &bb); printf("aa = %d, bb = %d\n", aa, bb); return 0; }
輸出結果如下:
三、常量與指針
const int* p; ? ?//p 可變,p 指向的內容不可變
int const* p; ? ?//p 可變,p 指向的內容不可變
int* const p; ? ?//p 不可變,p 指向的內容可變
const int* const p; ? ?//p 和 p 指向的內容都不可變
口訣:左數右指
當 const 出現在 * 號左邊時指針指向的數據為常量,當 const 出現在 * 后右邊時指針本身為常量
下面通過一個例子加深理解:
#include <stdio.h> int main() { int i = 0; const int* p1 = &i; int const* p2 = &i; int* const p3 = &i; const int* const p4 = &i; *p1 = 1; // compile error p1 = NULL; // ok *p2 = 2; // compile error p2 = NULL; // ok *p3 = 3; // ok p3 = NULL; // compile error *p4 = 4; // compile error p4 = NULL; // compile error return 0; }
輸出結果如下:
四、小結
- 指針是 C 語言中一種特別的變量
- 指針所保存的值是內存的地址
- 可以通過指針修改內存中的任意地址內容
原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/123573522
相關推薦
- 2022-04-14 遇到一個git的大坑 src refspec master does not match any e
- 2023-01-10 Docker調度器Kubernetes使用過程_docker
- 2022-04-18 騰訊im中調用 setMessageRead 會話列表中的未讀消息還在存在
- 2022-06-26 django中模板繼承與ModelForm實例詳解_python
- 2023-11-23 pyside6兩個按鈕,一個控制子線程的開始,暫停,。一個控制子線程結束
- 2022-06-27 Abp集成HangFire開源.NET任務調度框架_實用技巧
- 2022-08-10 C#并行編程Task類用法介紹_C#教程
- 2022-08-15 Springboot整合Elasticsearch及相關API
- 最近更新
-
- 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同步修改后的遠程分支