【C語言】指針(1)--入門理解

目錄

一、內存和地址

二、指針變量和地址

三、指針變量類型的意義


一、內存和地址

只要講指針就離不開內存

因為指針就是訪問內存的

計算上CPU(中央處理器)在處理數據的時候,需要的數據是在內存中讀取的,處理后的數
據也會放回內存中,那我們買電腦的時候,電腦上內存是8GB/16GB/32GB等,那這些內存空間如何高效的管理呢?
其實也是把內存劃分為?個個的內存單元,每個內存單元的大小取1個字節
計算機常見單位
bit - ?特位
byte - 字節
KB
MB
GB
TB
PB1byte = 8bit
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB

內存單元編號==地址==指針

二、指針變量和地址

CPU訪問內存中的某個字節空間,必須知道這個字節空間在內存的什么位置,?因為內存中字節很多,所以需要給內存進?編址(就如同宿舍很多,需要給宿舍編號?樣)。計算機中的編址,并不是把每個字節的地址記錄下來,?是通過硬件設計完成的。
?先,必須理解,計算機內是有很多的硬件單元,?硬件單元是要互相協同?作的。所謂的協同,?少相互之間要能夠進?數據傳遞。但是硬件與硬件之間是互相獨?的,那么如何通信呢?答案很簡單,?"線"連起來。?CPU和內存之間也是有?量的數據交互的,所以,兩者必須也?線連起來。不過,我們今天關??組線,叫做地址總線。
32位機器有32根地址總線, 每根線只有兩態,表?0,1【電脈沖有?】,那么 ?根線,就能表?2種含義,2根線就能表?4種含義,依次類推。32根地址線,就能表?2^32種含義,每?種含義都代表?個地址。地址信息被下達給內存,在內存上,就可以找到該地址對應的數據,將數據在通過數據總線傳?CPU內寄存器。
int main()
{
int a = 10;//創建變量的本質是向內存申請一塊空間,為a申請4個字節的空間return 0;
}

指針變量和解應用操作符

int main()
{int a = 10;//&a --- &取地址操作符//& 單目操作符printf("%p\n",&a);return 0;
}
//指針--地址
//指針變量--存放地址的變量int main()
{int a = 10;//&a --- &取地址操作符//& 單目操作符//printf("%p\n",&a);int* p = &a;//p是一個變量(指針變量),是一塊空間//編號-地址-指針//int說明p指向對象是int類型的//*在說明p是指針變量
return 0;
}
int main()
{char ch = 'w';char* pc = &ch;return 0;
}
int main()
{int a =10;int * p= &a;*p =0;//* -解引用操作符(間接訪問操作符)//a =0;】//*&a = 0;//a = 0
printf("%d",a);//0?return 0;
}

指針變量的大小

32位機器假設有32根地址總線,每根地址線出來的電信號轉換成數字信號后是1或者0,那我們把32根地址線產?的2進制序列當做?個地址,那么?個地址就是32個bit位,需要4 個字節才能存儲。
如果指針變量是?來存放地址的,那么指針變的??就得是4個字節的空間才可以。同理64位器,假設有64根地址線,?個地址就是64個?進制位組成的?進制序列,存儲起來就需要8個字節的空間,指針變的??就是8個字節。
指針變量 - 存放地址的
? ? ? ? ? ? ? ? ? 地址產生:地址線上傳輸的
? ? ? ? ? ? ? ? ? ?32根地址線 ——>地址是:32個0/1組成的二進制序列
? ? ? ? ? ? ? ? ? ?要儲存這樣的地址:32bit位的空間 ==4個字節
int main(){printf("%zd\n", sizeof(char *));printf("%zd\n", sizeof(short *));printf("%zd\n", sizeof(int *));printf("%zd\n", sizeof(double *));return 0;}

結論:
? 32位平臺下地址是32個bit位,指針變量??是4個字節
? 64位平臺下地址是64個bit位,指針變量??是8個字節
? 注意指針變量的??和類型是?關的,只要指針類型的變量,在相同的平臺下,??都是相同的。

三、指針變量類型的意義

指針類型決定了指針進行解應用操作符的時候訪問幾個字節,也就是決定指針的權限

int main()
{ int a = 0x11223344;int * pa = &a;*pa =0;return 0;
}

//代碼1
#include <stdio.h>
int main()
{int n = 0x11223344;int *pi = &n; *pi = 0; return 0;
//代碼2
#include <stdio.h>
int main()
{int n = 0x11223344;char *pc = (char *)&n;*pc = 0;return 0;
}
調試我們可以看到,代碼1會將n的4個字節全部改為0,但是代碼2只是將n的第?個字節改為0。
結論:指針的類型決定了,對指針解引?的時候有多?的權限(?次能操作?個字節)。
?如: char* 的指針解引?就只能訪問?個字節,? int* 的指針的解引?就能訪問四個字節。

指針+-整數

int main()
{int a =10;int *pa = &a;char* pc = &a;printf("pa=%p\n",pa);printf("pa+1 = %p\n",pa+1);printf("pc = %p\n",pc);printf("pc+1 = %p\n",pc+1);return 0;
}

指針類型決定了指針進行+1,-1的時候,一次走遠的距離

int * +1 --->走4個字節(整型大小)

char* +1--->走了1個字節(字符大小)

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

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

相關文章

PY32F030高性能單片機,主頻高達48M,最大64 KB 閃存,8 KB SRAM

PY32F030是普冉的一顆32位高性能MCU&#xff0c;采用32 位 ARM Cortex-M0 內核&#xff0c;高達16~64 Kbytes Flash 和 2~8 Kbytes SRAM 存儲器&#xff0c;最高 48 MHz 工作頻率。PY32F030 單片機的工作溫度范圍為 -40 ~ 105 C&#xff0c;工作電壓范圍為1.7 ~ 5.5 V&#xff…

Centos7刪除MariaDB

在 CentOS 7 上刪除 MariaDB 可以通過 yum 包管理器來完成。以下是一步一步的指導&#xff1a; 打開終端&#xff1a;首先&#xff0c;你需要打開你的 CentOS 7 系統的終端。 停止 MariaDB 服務&#xff08;如果正在運行&#xff09;&#xff1a;在卸載 MariaDB 之前&#xff…

IDEA實現遠程Debug的步驟與方法

IDEA實現遠程Debug的步驟與方法 在軟件開發過程中&#xff0c;遠程Debug是一個非常重要的功能&#xff0c;它允許開發者在本地IDE中調試遠程服務器上的應用程序。IntelliJ IDEA作為一款強大的Java開發工具&#xff0c;提供了豐富的遠程Debug功能。本文將詳細介紹如何使用IDEA實…

多語言版在線出租車預訂完整源碼+用戶應用程序+管理員 Laravel 面板+ 司機應用程序最新版源碼

源碼帶PHP后臺客戶端源碼 Flutter 是 Google 開發的一款開源移動應用開發 SDK。它用于開發 Android 和 iOS 應用&#xff0c;也是為 Google Fuchsia 創建應用的主要方法。Flutter 小部件整合了所有關鍵的平臺差異&#xff0c;例如滾動、導航、圖標和字體&#xff0c;可在 iOS 和…

DevOps實戰:使用GitLab+Jenkins+Kubernetes(k8s)建立CI_CD解決方案

一.系統環境 本文主要基于Kubernetes1.21.9和Linux操作系統CentOS7.4。 服務器版本docker軟件版本Kubernetes(k8s)集群版本CPU架構CentOS Linux release 7.4.1708 (Core)Docker version 20.10.12v1.21.9x86_64CI/CD解決方案架構圖:CI/CD解決方案架構圖描述:程序員寫好代碼之…

ASP.NET MVC-razor編寫-2-svg中使用js+添加事件監聽

環境&#xff1a;win10 效果 初始狀態&#xff1a; 鼠標移入某個text&#xff08;比如KS primer&#xff09;時&#xff0c;text和連接的線條與箭頭都變色&#xff1a; 鼠標移出時回復正常。 如果是移入另一種紅色的text&#xff08;比如Cell Sceening Tag&#xff09;&…

創建本地倉庫

一、新建掛載目錄 二、將掛載本地鏡像掛載到目錄 三、配置yum倉庫 一、新建掛載目錄 mkdir /BenDiCangKu 二、將掛載本地鏡像掛載到目錄 1、先連接本地光盤 2、掛載光盤 mount /dev/sr0 /BenDiCangKu 3、查看掛載 由此可見掛載成功 三、配置yum倉庫 1、新建yum倉庫文件…

php簡單商城小程序系統源碼

&#x1f6cd;?【簡單商城小程序】&#x1f6cd;? &#x1f680;一鍵開啟&#xff0c;商城搭建新體驗&#x1f680; 你還在為繁瑣的商城搭建流程頭疼嗎&#xff1f;現在&#xff0c;有了簡單商城系統小程序&#xff0c;一切變得輕松又快捷&#xff01;無需復雜的編程知識&a…

構建Android studio版的CarSystemUI工程時因為包名一致導致BuildConfig問題

項目場景&#xff1a; 公司計劃開發杰發AC8025-Android 12版本車載平臺&#xff0c;前期預研需要構建Android studio版的CarSystemUI工程 問題描述 AAOS車載項目里面的CarSystemUI源碼默認無Android studio版本&#xff0c;為了后期快速開發調試需要構建Android studio能直接…

STM32基礎知識

一.STM32概述 第一款STM32單片機發布的時間為2007年6月11日。由意法半導體&#xff08;ST&#xff09;公司推出&#xff0c;是STM32系列中的首款產品&#xff0c;具體型號為STM32F1&#xff0c;它是一款基于Cortex-M內核的32位微控制器&#xff08;MCU&#xff09;。 STM32F1…

【openstack基礎操作】

openstack 常用命令 source ~/base/src/kayobe-config/etc/kolla/admin-openrc.sh https://docs.openstack.org//kayobe/latest/doc-kayobe.pdf 鏡像下載點 http://cloud.centos.org/centos/7/images/創建虛擬機 openstack server create --image 13d0686a-a7cc-4cc6-8bf7-76…

2024年【湖北省安全員-C證】考試資料及湖北省安全員-C證考試試卷

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 湖北省安全員-C證考試資料是安全生產模擬考試一點通生成的&#xff0c;湖北省安全員-C證證模擬考試題庫是根據湖北省安全員-C證最新版教材匯編出湖北省安全員-C證仿真模擬考試。2024年【湖北省安全員-C證】考試資料及…

JS+CSS+HTML項目-中國國家圖書館

頁面做的不多&#xff0c;CSS效果請看嗶哩嗶哩

英智玲瓏一體機在律所能做什么

只要不開庭&#xff0c;學習就不能停 好的律師是法律知識的百科全書 要精通、全面理解各類型的法律 還要不斷學習更新的條例釋義 一天即使工作24小時 也有忙不完的文書起草&#xff0c;資料核對&#xff0c;案情分析整理 有了英智玲瓏一體機&#xff0c;這些都不是難題&am…

MySQL8.0~open_files_limit 和 innodb_open_files 參數生效取值標準

前置條件 設置參數 /etc/security/limits.conf中設置如下 * soft nofile 100001 * hard nofile 100002 root soft nofile 100001 root hard nofile 100002 mysql soft nofile 65535 mysql hard nofile 65535my.cnf中設置如下 table_open_cache5000 open_files_limit20000 i…

一鍵式創建GTest測試平臺

適用于C GTest測試平臺搭建。直接上python腳本。 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import argparse import os import platform import subprocess from xml.etree import ElementTree as ETdefault_root_path "d:\\test\\UTtest"class DeveloperTe…

init,service和systemctl的區別

1、service是一個腳本命令&#xff0c;分析service可知是去/etc/init.d目錄下執行相關程序。service和chkconfig結合使用。 服務配置文件存放目錄/etc/init.d/ 2、systemd centos7版本中使用了systemd&#xff0c;systemd同時兼容service,對應的命令就是systemctl systemctl命…

四款主流電腦監控軟件(電腦監控軟件主要優勢)

在現代企業環境中&#xff0c;確保員工的工作效率和企業信息的安全成為了管理者的重要任務。電腦監控軟件作為一種有效的管理工具&#xff0c;能夠幫助企業實現這些目標。固信電腦監控軟件在這方面表現尤為出色&#xff0c;本文將詳細介紹固信電腦監控軟件的優勢及其主要功能&a…

如何在DDD項目實戰中保證子系統/限界上下文的低耦合

如何在DDD項目實戰中保證子系統/限界上下文的低耦合&#xff0c;首先通過如下幾個層次和環節來保證。 1.業務需求分析階段 需求要理解透徹&#xff0c;哪些功能應該放在一起。識別哪些是易變需求&#xff0c;哪些是穩定需求。識別哪些是通用需求&#xff0c;哪些是定制需求。…

《NATURE丨使用 AlphaFold 3 準確預測生物分子相互作用的結構》

NATURE丨使用 AlphaFold 3 準確預測生物分子相互作用的結構 注意&#xff01;&#xff1a;本文創作僅根據個人理解和網絡信息&#xff0c;如有錯誤懇請指正&#xff01;謝謝&#xff01; 大家好&#xff0c;今天分享的文獻是2024年5月發表在Nature上的“ Accurate structure …