C語言基礎知識04

指針

指針概念

????????指針保存地址,地址是字節的編號

????????指針類型和保存的地址類型要一直

????????使用時注意,把地址轉換為&變量的格式來看??????? int a[3];? a轉為&a[0]

指針的大小

????????64bit??????? 固定8字節,????????32bit??????? 固定4字節

指針的定義

????????格式:數據類型 變量名

????????指針的標識:

????????int a;

????????int a[3];? 先寫單個變量,變量名后加[]和元素個數

????????int *a;? 先寫單個變量,在變量名后面加*,表示指向該空間類型的指針

????????空間類型==地址類型==數據類型

多級指針

指針的初始化

????????指針不初始化--野指針,應避免野指針的出現

????????int *p=NULL;

int a=5;
int *p=&a;//初始化直接指向變量地址
char *p= “hello”;
char a[10]= “hello”;

指針的使用

????????* 乘法 雙目 1*2?

????????* 解指針/解地址 單目 *地址?

????????& 取地址 同空間變量獲取空間的地址?

????????* 解地址 通過空間地址找到空間變量?

????????所以*&可以抵消

int a=5;
int *p=&a;
int **q=&p;
int ***k=&q;
printf(“%d”, a);//5
printf(“%d”, *p);//5
printf(“%d”, **q);//5
printf(“%d”, ***k);//5

類型轉換

????????數據轉換:自動轉換,自動向高精度轉換

??????????????? 強制轉換:float a=3.14; printf("%d", (int)a);

????????地址轉換/空間類型轉換:強制轉換

int a=65;
char *p=(char *)&a;// &a 代表 4 字節空間地址 (char *)強制轉換為 1 字節空間地址
if(*p == 65)
{
printf(“小端\n”);
}

大小端

????????低位地址存高位數據??????? 大端存儲

????????低位地址存低位數據??????? 小端存儲

????????數據在進行網絡傳輸時,尤其是跨平臺和設備,會出現存儲方式不同而引起的數據錯誤,所以在發送數據之前需要進行大小端測試

地址偏移

????????地址加減,加減的是空間個數,空間的大小由空間類型決定

int a[5][20];
int *p=&a[0][0];
p+1 == &a[0][0]+1 == &a[0][1]
(int (*)[20])p+1 == &a[0]+1 == &a[1]
int (*q)[20]=&a[0]; // sizeof(q)==8
變量 q 先與*結合,所以 q 是指針
再與[20]結合,所以指針指向數組,數組有 20 個元素
最后與 int 結合,所以數組元素是整型變量
q+1 == &a[0]+1 == &a[1]
(int *)q+1 == &a[0][0]+1 == &a[0][1]

指針常量&&常量指針

關鍵字:const
功能:修飾變量為常量
int *p; // 整型指針
float *p; // 浮點型指針
char *p; // 字符指針
常量指針:指向常量的指針
數字常量 字符常量 字符串常量
指針常量:指針自己是常量
const char *p;//常量指針 const 修飾*p,指針指向的空間是常量
char const *p;//常量指針
char * const p;//指針常量 const 修飾 p,指針自身是常量
const char * const p;//常量指針常量

指針數組&&數組指針

int a[5];// 整型數組
float a[5];// 浮點型數組
char a[5];// 字符數組
指針數組:由指針組成的數組
int *a[5];// 整型指針數組
char *a[5];// 字符指針數組
數組指針:指向整個數組的指針
int (*p)[5];// 整型數組指針
int a[2][3];
int (*p[2])[3]; // 整型數組指針數組
p[0]=&a[0];
p[1]=&a[1];

二維字符數組&&字符指針數組

char a[3][5]={“123”, “456”, “789”}; // 二維字符數組a 字節大小:15
char *a[3]={“123789”, “456789”, “7896666666”}; // 字符指針數組a 字節大小:24printf(“%s\n”, a[1]+1); // 56789

附面試題:

1、地址為0x80000020的內存段存儲一個浮點型數據3.14

??????? float *p(float *)0x80000020;

??????? *p = 3.14;

2、

unsigned char *p=0x10000010;

(unsigned long *)p+2=0x10000020;

(unsigned long)p+2=0x10000012;

(char (*)[5])p+2=0x1000001A;

(short (**))p+2=0x10000020;

3、

#include <stdio.h>
int main()
{char *p = "%s,%d\n";char *a = "hello";printf(p,a,36);printf(p+3,36);printf("%s,%d\n","hello",36);return 0;
}

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

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

相關文章

計算矩陣邊緣元素之和(信息學奧賽一本通-1121)

【題目描述】 輸入一個整數矩陣&#xff0c;計算位于矩陣邊緣的元素之和。所謂矩陣邊緣的元素&#xff0c;就是第一行和最后一行的元素以及第一列和最后一列的元素。 【輸入】 第一行分別為矩陣的行數m和列數n&#xff08;m<100&#xff0c;n<100&#xff09;&#xff0c…

異常(9)

大家好,今天我們來詳細介紹一下異常拋出的知識,在編寫程序時,如果程序中出現錯誤,此時就需要將錯誤的信息告知給調用者,話不多說,來看. 在java中,可以借助throw關鍵字,拋出一個指定的異常對象,將錯誤對象告知給調用者,具體語法如下&#xff1a; throw new xxx("異常產生…

網絡安全就業形勢

網絡安全是一個日益增長的行業&#xff0c;對于打算進入或轉行進入該領域的人來說&#xff0c;制定一個清晰且系統的職業規劃非常重要。2025年&#xff0c;網絡安全領域將繼續發展并面臨新的挑戰&#xff0c;包括不斷變化的技術、法規要求以及日益復雜的威脅環境。 第一部分&am…

3U VPX 國產化板卡FT6678+V7 690T

板卡1、 采用標準3U VPX架構&#xff0c;板上集成1片深圳國微電子SMQ7V690TFFG1761&#xff08;pin-to-pin兼容Xilinx的XC7VX690T-2FFG1761I&#xff09;FPGA&#xff0c;1片國防科大FT-M6678&#xff08;功能兼容TI的TMS320C6678&#xff09;&#xff0c;對外接口RS422、網口…

【數據結構】-哈夫曼樹以及其應用

哈夫曼樹&#xff08;Huffman Tree&#xff09; 1. 哈夫曼樹的定義 哈夫曼樹&#xff08;Huffman Tree&#xff09;是一種 帶權路徑長度最短的二叉樹&#xff0c;常用于數據壓縮和最優前綴編碼。其目標是使得 帶權路徑長度&#xff08;WPL&#xff09;最小。 在信息論和計算…

Linux 命名管道

文章目錄 &#x1f680; 深入理解命名管道&#xff08;FIFO&#xff09;及其C實現一、命名管道核心特性1.1 &#x1f9e9; 基本概念 二、&#x1f4bb; 代碼實現解析2.1 &#x1f4c1; 公共頭文件&#xff08;common.hpp&#xff09;2.2 &#x1f5a5;? 服務器端&#xff08;s…

sap 內存管理與數據共享方式

SAP內存管理 內存是程序之間為了傳遞數據而使用的共享存儲空間 SAP內存分類&#xff1a;1、SAP內存&#xff0c;2、ABAP內存 這兩種內存都是針對同一登錄用戶實現數據共享。 SAP內存&#xff08;SAP Memory&#xff09;和ABAP內存&#xff08;ABAP Memory&#xff09;&…

數據結構與算法(哈希表——兩個數組的交集)

原題 349. 兩個數組的交集 - 力扣&#xff08;LeetCode&#xff09; 給定兩個數組 nums1 和 nums2 &#xff0c;返回 它們的 交集 。輸出結果中的每個元素一定是 唯一 的。我們可以 不考慮輸出結果的順序 。 示例 1&#xff1a; 輸入&#xff1a;nums1 [1,2,2,1], nums2 […

python筆記2

變量&#xff1a;含義 一個容器&#xff0c;計算機當中的存儲空間。 可以理解為一個用于標識或引用數據的名字或標簽。 作用&#xff1a; 可以通過定義一個變量來給需要使用多次的數據命名&#xff0c;就像一個標簽一樣。下次需要使用這個數據時&#xff0c;只需要通過這個變…

【Linux系統編程】信號

目錄 1、信號1.1、什么是信號1.2、進程對信號的處理1.3、信號的生命周期1.4、信號處理流程1.5、信號的發送 2、kill()、raise()函數 發送信號3、alarm函數 鬧鐘信號4、pause函數 掛起信號、暫停5、singal 函數 捕獲信號5.1、為什么返回值是上一次的處理方式5.2、練習 6、sigact…

實用小工具——快速獲取數據庫時間寫法

最近我遇到了一個比較棘手的問題&#xff1a;在工作中&#xff0c;各個項目所使用的數據庫類型各不相同。這導致我習慣性地使用Oracle的SQL語句進行編寫&#xff0c;但每次完成后都會遇到報錯&#xff0c;最終才意識到項目的數據庫并非Oracle。為了避免這種情況&#xff0c;我需…

數據類型及sizeof,進制轉換

其實數據類型可以講很多內容&#xff0c;這里看情況需要講多久吧。 本篇基本都是理論。 目錄 數據類型的分類 基本數據類型 構造數據類型 指針類型 空類型 計算數據類型或變量所占用的內存字節數 基本語法 進制轉換 二進制 二進制的概念 二進制與十進制的轉換 十六進…

pjsip dtmf發送和接收(pjsua)

DTMF(雙音多頻,Dual-Tone Multi-Frequency)是一種用于電話系統的信號技術,通過組合兩個不同頻率的音頻信號來表示數字和符號。以下是DTMF的主要使用背景和應用場景: 電話撥號 DTMF最常見的用途是電話撥號。當用戶按下電話鍵盤上的數字或符號時,電話會生成兩個特定頻率的音…

落雪音樂Pro 8.8.6 | 內置8條音源,無需手動導入,純凈無廣告

洛雪音樂Pro版內置多組穩定音源接口&#xff0c;省去手動導入的繁瑣操作&#xff0c;安裝即可暢聽海量音樂。延續原版無廣告的純凈體驗&#xff0c;支持歌單推薦與音源切換&#xff0c;滿足個性化聽歌需求。此版本僅支持在線播放&#xff0c;無法下載音樂&#xff0c;且與原版不…

mac安裝navicat及使用

0.刪除舊的 sudo rm -Rf /Applications/Navicat\ Premium.app sudo rm -Rf /private/var/db/BootCaches/CB6F12B3-2C14-461E-B5A7-A8621B7FF130/app.com.prect.NavicatPremium.playlist sudo rm -Rf ~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexF…

【Unity】 HTFramework框架(六十二)Agent編輯器通用智能體(AI Agent)

更新日期&#xff1a;2025年3月14日。 Github源碼&#xff1a;[點我獲取源碼] Gitee源碼&#xff1a;[點我獲取源碼] 索引 編輯器通用智能體AIAgent類Friday&#xff08;星期五&#xff09;啟用智能體設置智能體類型開放智能體權限智能體交互資源優化批處理運行代碼聯網搜索休閑…

EverArt MCP 服務器安裝調試筆記 -cline

EverArt MCP 服務器安裝調試筆記 問題描述 用戶在使用 EverArt MCP 服務器時遇到報錯&#xff1a;“MCP error -1: Connection closed”。 調試過程 檢查配置文件 cline_mcp_settings.json: 確認 everart 服務器的配置信息&#xff0c;包括 command、args 和 env 是否正確。…

MFC中使用Create或CreateDialog創建對話框失敗,GetLastError錯誤碼為1813(找不到映像文件中指定的資源類型)

文章目錄 創建對話框失敗示例、原因分析及解決方案示例代碼錯誤原因解決方案 AFX_MANAGE_STATE(AfxGetStaticModuleState())作用一、功能1. 模塊狀態切換2. 自動狀態恢復 二、為什么要用該函數&#xff1f;三、必須使用該宏的典型場景1. MFC 擴展 DLL&#xff08;Extension DLL…

php進程管理

php-fpm(fastcgi process manager)是PHP 的FastCGI管理器&#xff0c;管理PHP的FastCGI進程&#xff0c;提升PHP應用的性能和穩定性 php-fpm是一個高性能的php FastCGI管理器&#xff0c;提供了更好的php進程管理方式&#xff0c;可以有效的控制內存和進程&#xff0c;支持平滑…

《MySQL數據庫從零搭建到高效管理|表的增刪改查(基礎)》

目錄 引言&#xff1a; 一、表的操作 1.1 創建學生表 1.2 查看表結構 1.3 刪除表 1.4 修改表名 1.5 添加字段 1.6 修改字段 1.7 刪除字段 1.8 小結 二、CRUD 2.1 新增&#xff08;Create&#xff09;數據 2.2 查詢&#xff08;Retrieve&#xff09;數據 2.3 修改&…