指針的運算與數組

一、指針的運算

1.1加法

? ? ? ?對指針可以進行加法運算,即p + n或者p - n。其結果依舊是一個是一個指針,新的指針是在原來的地址值基礎上加上/減去n *(sizeof(指針指向的數據類型))個字節。??

? ? ? ?指針也可以進行自增,即*(p ++)或*(++p)或*++p(單目運算符自右向左運算)。(*p)++? 他表示指針的內容自增,而不是指針本身。

? ? ? ?指針之間不能進行加法求和(沒意義)。

1.2減法

? ? ? ?指針和指針之間可以進行減法運算,但是要保證兩種(指針指向的數據類型)一致并且必須指向同一數組,結果為(p1地址 - p2地址) / sizeof(指針類型),即表示兩個變量差幾個基類型。

?

二、指針與數組 ?

? ? ? 指針能表示數組主要基于數組的單一性、連續性與有序性。

2.1 空指針

? ? ? 在編程中,空指針?是一個特殊的指針值,表示該指針不指向任何有效的內存地址。它通常用于表示 “無指向”“未初始化” 或 “無效引用” 的狀態(NULL)。

? ? ? 指針聲明時若未確定指向,通常初始化為空指針,避免成為 “野指針”(指向隨機內存的危險指針),空指針避免野指針意外修改重要數據。可通過判斷指針是否為空,避免無效操作

2.2 迭代器

? ? ? ?數組元素在內存中連續存儲,指針可以通過地址偏移實現高效遍歷。例如:

int a[] = {1, 2, 3, 4, 5};
int len = sizeof(a) / sizeof(a[0]);
int* i;  for (i = a; i < len - 1; i++) 
{printf("%d ", *i);  
}
// 輸出:1 2 3 4 5

2.3 一維數組

(1)遍歷

對一維數組完成遍歷

void printArray(int *a,int len)
{int i;for(i = 0;i < len;++i){    printf("%d\n", *(a + i));}}int main(void)
{int a[] = {0,1,2,3,4,5,6,7,8,9};int len = sizeof(a) / sizeof(a[0]);printArray(a,a + len - 1);return 0;}

(2)逆序

對一維數組內容完成逆序

void reverse(int *a, int len)
{int i;for(i = 0;i < (len / 2); ++i){int t;t = *(a + i);*(a + i) = *(a + len - i - 1);*(a + len - i - 1) = t;}
}int main(void)
{int a[] = {1,2,3,4,5,6,7,8,9,0};int len = sizeof(a) / sizeof(a[0]);reverse(a,a + len - 1);return 0;
}

(3)排序(選擇排序)

對數組進行選擇排序:

void swap(int *a,int *b)
{int t;t = *a;*a = *b;*b = t;
}
void choiceSort(int *a,int len)
{int i,j;for(i = 0;i < len - 1;++i){for(j = i + 1;j < len;++j){if(*(a + i) > *(a + j) ){swap((a + i),(a + j));}}}}int main(void)
{int a[] = {1,2,3,4,5,6,7,8,9,0};int len = sizeof(a) / sizeof(a[0]);choiceSort(a,a + len - 1);return 0;}

2.4 qsort(快速查找)

? ? ? ? 下列代碼通過“選基準→分區→遞歸排序子數組”的步驟,實現了快速排序算法,最終將 [begin, end] 區間的元素按升序排列。

void qSort(int *begin,int *end)
{if(begin >= end){return ;}int t = *begin;int *p = begin;int *q = end;while(p < q){while(p < q && *q >= t){--q;}while(p < q && *p <= t){++p;}swap(p,q);}swap(begin,p);qSort(begin,p - 1);qSort(p + 1, end);
}int main(void)
{int a[] = {1,2,3,4,5,6,7,8,9,0};int len = sizeof(a) / sizeof(*a);qSort(a,a + len - 1);printArray(a,a + len - 1);return 0;
}

2.5 二分查找

int *binaryFind(int *begin, int *end,int n)
{while(begin <= end){int *mid = (end - begin) / 2 + begin;if(*mid > n){end = mid - 1;}else if(*mid < n){begin = mid + 1;}else{return mid;}}return NULL;
}int main(void)
{int a[] = {1,2,3,4,5,6,7,8,9,0};int len = sizeof(a) / sizeof(*a);choiceSort(a,a + len - 1);int *ret = binaryFind(a,a + len -1,4);if(ret){printf("Found\n");}else{printf("No Found\n");}return 0;
}

?

2.6 字符型數組

遍歷與查找有效字符

void Puts(char *s)
{while(*s != '\0'){putchar(*s);++s;}putchar('\n');
}int Strlen(char *s)
{int counter = 0;while(*s){++s;++counter;}return counter;
}
int main(void)
{char s[] = {"Hello"};//Puts(s + 1);printf("%d\n",Strlen("Hello World!"));return 0;
}

? ?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91256.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91256.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91256.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【PostgreSQL內核學習:WindowAgg 幀優化與節點去重】

PostgreSQL內核學習&#xff1a;WindowAgg 幀優化與節點去重背景關鍵詞解釋本優化主要修改內容描述提交信息提交描述源碼解讀optimize_window_clauses 函數核心邏輯拆解函數時序圖新增結構體類型 SupportRequestOptimizeWindowClause優化后的效果幀優化 sql 用例查詢計劃輸出節…

行業要聞|正式落地!新思科技宣布完成對Ansys的收購

2025年7月17日——新思科技&#xff08;Synopsys, Inc.&#xff0c;納斯達克股票代碼&#xff1a;SNPS&#xff09;宣布完成對Ansys的收購。該交易旨在整合芯片設計、IP核以及仿真與分析領域的領先企業&#xff0c;助力開發者快速創新AI驅動的產品。在擴大至310億美元的總潛在市…

Elasticsearch 基礎速成 5 步跑通索引、文檔、映射與查詢

1 準備工作運行環境 curl -fsSL https://elastic.co/start-local | sh # 一條命令拉起本地單節點集群 # 瀏覽器打開 http://localhost:5601 進入 Kibana → DevTools → Console已有云端或 Serverless 集群可以直接跳到第 2 步。操作界面 以下所有請求均可在 Kibana → DevT…

語音表示學習論文總結

語音表示學習&#xff08;Speech Representation Learning&#xff09;是語音信號處理與機器學習交叉領域的核心技術&#xff0c;其目標是通過數據驅動的方式&#xff0c;從原始語音信號中自動提取具有判別性、魯棒性和泛化能力的特征表示&#xff0c;以替代傳統手工設計的聲學…

國產芯+單北斗防爆終端:W5-D防爆智能手機,助力工業安全通信升級

在石油石化、煤礦開采、電力檢修等高危行業&#xff0c;防爆設備的定位精度、通信可靠性及供應鏈安全性直接決定作業安全與生產效率。傳統防爆手機依賴GPS定位與進口芯片&#xff0c;存在信號盲區、數據泄露風險及斷供隱患。針對此&#xff0c;我們推出W5-D防爆智能終端&#x…

Kafka簡述及學習課程

Kafka是由Apache軟件基金會開發的一個開源流處理平臺&#xff0c;由Scala和Java編寫。Kafka是一種高吞吐量的分布式發布訂閱消息系統&#xff0c;它可以處理消費者在網站中的所有動作流數據。 這種動作&#xff08;網頁瀏覽&#xff0c;搜索和其他用戶的行動&#xff09;是在現…

BLE PHY 幀結構

BLE&#xff08;低功耗藍牙&#xff09;的 PHY&#xff08;物理層&#xff09;幀結構根據傳輸模式&#xff08;廣播、數據&#xff09;和 PHY 類型&#xff08;1M、2M、Coded PHY&#xff09;有所差異&#xff0c;但基本框架一致。以下是 BLE PHY 幀的通用結構及各部分含義&…

海外貨運 app 系統架構分析

一、引言海外貨運業務涉及眾多復雜環節&#xff0c;從貨物攬收、倉儲管理、運輸調度到最后交付&#xff0c;需要一個高效、穩定且功能全面的 APP 系統來協調各方資源&#xff0c;提升物流效率&#xff0c;保障貨物安全準確送達。本文將對海外貨運 APP 系統架構進行詳細剖析&…

【硬件-筆試面試題】硬件/電子工程師,筆試面試題-52,(知識點:簡單一階低通濾波器的設計,RC濾波電路,截止頻率)

目錄 1、題目 2、解答 3、相關知識點 一、一階低通濾波器的核心原理 1. 電路結構 2. 關鍵特性參數 二、一階低通濾波器的設計步驟&#xff08;以 RC 電路為例&#xff09; 1. 確定截止頻率\(f_c\) 2. 選擇電阻 R 的阻值 3. 計算電容 C 的容值 4. 驗證與調整 三、典…

防火墻安全實驗

一、實驗拓補圖二、實驗需求1、VLAN 2屬于辦公區;VLAN 3屬于生產區2、辦公區PC在工作日時間(周一至周五&#xff0c;早8到晚6)可以正常訪OA Server&#xff0c;其他時間不允許3、辦公區PC可以在任意時刻訪問Web server4、生產區PC可以在任意時刻訪問OA Server&#xff0c;但是不…

TOC-Transformer-LSTM-ABKDE,計算機一區算法龍卷風優化算法應用到概率區間預測!Matlab實現

TOC算法概述 文獻《Tornado optimizer with Coriolis force: a novel bio-inspired meta-heuristic algorithm》核心解讀&#xff1a;科里奧利力的龍卷風優化算法&#xff08;Tornado optimizer with Coriolis force&#xff0c;TOC&#xff09;對龍卷風循環過程的觀察以及雷暴…

Adobe Illustrator安裝下載教程(附安裝包)Illustrator2025

文章目錄一、Illustrator2025 下載鏈接二、Illustrator2025 安裝步驟三、Illustrator 2025 軟件介紹一、Illustrator2025 下載鏈接 夸克下載鏈接&#xff1a;https://pan.quark.cn/s/b990bac7107c 二、Illustrator2025 安裝步驟 1.將安裝包下載并解壓&#xff0c;雙擊打開&am…

matlab - 算4個數的加減法

文章目錄matlab - 算4個數的加減法概述筆記ENDmatlab - 算4個數的加減法 概述 有個類似于下面的4個數的加減法&#xff0c;給出任意一組解就行。 反正都是遍歷, c可以&#xff0c;matlab也可以。 筆記 % file test.m % brief 用matlab來算"4個數的加減法" %a b…

C++ 1.面向對象編程(OOP)框架

目錄 面向對象編程(OOP)框架 問題背景 OOP框架開發的關鍵問題解析 步驟1&#xff1a;抽象設計階段 步驟2&#xff1a;繼承層次設計 步驟3&#xff1a;多態機制應用 步驟4&#xff1a;對象關系管理 這個案例展現的核心OOP價值 封裝的價值 繼承的價值 多態的價值 實際…

mac操作筆記

mac的操作筆記opt文件夾是干什么的&#xff1f;如何在某個訪達的文件夾里快速打開終端opt文件夾是干什么的&#xff1f; 在 macOS 中&#xff0c;/opt 目錄是一個可選&#xff08;optional&#xff09;軟件安裝目錄&#xff0c;主要用于存放第三方或非系統原生的應用程序。 /…

紅黑樹×協程×內存序:2025 C++后端核心三體問題攻防手冊

以下是2025年C后端開發全新高頻壓軸面試題&#xff0c;結合騰訊、字節、阿里等大廠最新技術棧&#xff0c;聚焦紅黑樹工程實踐、C20協程底層、Linux內核同步、分布式鎖實現及內存序重排五大核心領域&#xff0c;附工業級解決方案和手撕代碼示例&#xff1a; &#x1f333; 一、…

《人工智能導論》(python版)第2章 python基礎2.2編程基礎

書寫這篇博客的目的在于實踐并記錄《人工智能導論》&#xff08;Pyhton版&#xff09;微課視頻版這本書的內容&#xff0c;便于對人工智能有更深層次的理解。 參考文獻&#xff1a;姜春茂.人工智能導論&#xff08;Python版&#xff09;微課視頻版[M]. 北京:清華大學出版社,20…

高可用部署

一.keeplivaer nginx 高可用部署 下面為你詳細介紹基于 Keepalived 和 Nginx 在兩臺機器&#xff08;192.168.137.132 和 192.168.137.61&#xff09;上實現高可用部署的完整步驟&#xff1a; 一、環境準備&#xff08;兩臺服務器均執行&#xff09;環境準備 &#xff08;1&…

java面向對象高級02——單例類(設計模式)

1.什么是設計模式&#xff1f;一個問題可以有多種解法&#xff0c;在眾多解法的最優解法、方案就是設計模式。我們關注的點&#xff1a;某一種設計模式解決的是啥問題&#xff1f;這一設計模式怎么寫&#xff1f;2.單例設計模式a.作用單例設計模式的核心作用是確保一個類只有一…

0730 數據結構重點整理

Part 1.梳理數據結構重點一.宏1.簡單宏a. #define 宏名 宏體b. #if 宏(#ifndef)c.#endif2.多語句宏a. define 宏函數名(參數1&#xff0c;參數2......)({C語句1&#xff0c;C語句2......})b. define 宏函數名(參數1&#xff0c;參數2......)do(C語句1&#xff0c;C語句2......)…