日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++ 指针的深入理解

發布時間:2025/3/8 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++ 指针的深入理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 內存結構
    • 地址就是指針
      • 為什么地址就是指針?
    • 指針:地址的外號&
      • 變量空間開辟于內存
        • 1.所開辟的空間字節數>=1字節
        • 2.變量的每個字節都一個地址
        • 3.變量的第一個字節的地址代表整個變量的地址
        • 4.如何使用變量的指針找到整個變量空間?
    • 變量指針就是一個數
    • 如何使用一個數據
    • 一級指針與一級指針變量
      • 什么是一級指針
      • 什么是普通變量
      • 普通變量指針的類型
    • 使用指針訪問變量空間
      • 使用指針訪問空間
      • 如何找到a變量地址,然后讀、寫a變量地址
      • 使用指針操作a變量空間
      • *的兩種用途
    • 指針的好處
      • 傳遞指針
    • 傳遞普通數值與傳遞指針的異同
      • 指針的含義
      • 連續內存
      • 內存單一

內存結構

內存是由字節組成的
每個字節都有一個地址

地址就是指針

地址的別稱就是指針

為什么地址就是指針?

因為地址有指向作用,通過這個地址可以找到某個字節空間,然后操作(讀、寫)字節空間,因為地址有指向作用,因此我們也稱地址為指針。

舉個例子:
稱門牌號為指針,因為門牌號指向了某個房間,當然我們可以稱自己家的地址為指針,因為我家的地址指向了我家,根據門牌號和地址的指向,可以找到某個房間和我家,帶有指向作用的是指針。

指針:地址的外號&

變量空間開辟于內存

1.所開辟的空間字節數>=1字節

比如

char型變量 1個字節 short型變量 2個字節 int型變量 4個字節 float型變量 4個字節 double型變量 4個字節

sizeof是運算符不是函數

2.變量的每個字節都一個地址

3.變量的第一個字節的地址代表整個變量的地址

即變量的指針就是變量第一個字節的地址
使用變量的地址(第一個字節的地址),找到相應的變量空間,進行操作,讀或寫變量空間

4.如何使用變量的指針找到整個變量空間?

a.通過變量指針找到變量的第一個字節
b.根據變量的類型得到變量所占的總的字節,從第一個字節往后數,找到變量空間所有字節

變量指針就是一個數

a. 指針這個數好比門牌號
指針就是一個數,只是這個數有點特殊,它是一個地址
門牌號是房間的地址,用來指向某個房間。
b. C語言采用什么方法得到一個變量的指針 ?
方法使用取地址符 &

int a; &a //表示a變量的第一個地址,即a變量的指針。 printf("%p\n",&a); //16進制打印

提示: 打印一個變量的指針這個數時,可以采用%d方式打印,這也說明指針是一個比較特殊的整形數,但是你又不能說它是整形數,它是一個地址,我們也可以用%p,這個是地址專用的16進制打印形式打印結果

int a;
a指的是一個變量空間,我們可以向空間讀寫數據
&a指的是一個數,是變量a的指針,或者第一個字節的地址。

如何使用一個數據

a. 使用普通的整形數

直接使用
比如 printf("%d",10);

間接使用
先把這個數放到對應類型的變量中,通過使用變量來使用這個數
正常情況下,在不涉及類型轉換時,我們要求將某個類型的數據,放到對應類型的變量中,要求類型必須保持一致

b.使用變量指針這個數
直接使用

int a=10; printf("%d",&a);

間接使用
先把這個指針(數)放到一個變量中,然后通過這個變量使用這個數
存放指針這個數的變量就是指針變量。

int a=10; printf("%d\n",&a); int *p=&a; printf("%d\n",p); return 0;

一級指針與一級指針變量

什么是一級指針

a.指針:地址就是指針,指針是地址的別稱,指針是一個數,是一個字節的門牌號(地址)。b.變量的指針:變量空間的第一個字節地址c.什么是一級指針所有普通變量的指針就是一級指針

什么是普通變量

只要在變量的聲明或定義中,沒有*的變量就是普通變量
例如:int a;

普通變量指針的類型

指針的等級:

一級:* 類型 二級:** 類型 三級:*** 類型

一般不會超過三級
一級指針表示指針指向一個普通變量

char a='a';&a; //普通變量a的指針,表示第一個字節的地址char*類型:char型一級指針類型,*表示一級,char表示這個指針指向的變量空間是一個char型變量空間

使用指針訪問變量空間

使用指針訪問空間

&a //一個數,表示a變量的第一個地址,即a變量的指針(門牌號) int *pa;//表示定義一個整型的一級指針變量,用于存放整形一級指針(數) int *pa=&a;

如何找到a變量地址,然后讀、寫a變量地址

1.直接通過變量名進行操作
寫數據:a=100;
讀數據:int b; b=a;

使用指針操作a變量空間

寫數據

*pa=200; //等價于a=100

讀數據

int b=*pa; //等價于int b=a; 此時,*pa代表的就是a變量空間,我們可以對其讀寫 這里的*找空間操作:找到指針變量pa里面存放的指針(數據)所指向的空間。

*的作用就是找到指針指向的空間。

*的兩種用途

  • 定義指針變量時使用,比如
  • int *pa; //定義一個int型的一級指針 *表示定義的是指針變量,一個*表示一級指針變量

    2.訪問空間時使用*

    int a; int *pa=&a; *pa=100;//*找空間操作,找到pa這個指針變量里面放的指針所指向空間,*pa代表指針指向空間

    指針的好處

    int a=10; int *pa=&a; //pa里面放的是a的門牌號a=100; //使用變量名a訪問變量空間,寫空間,把100寫入 int b=a;//使用變量名a訪問變量空間,讀空間,將空間里面存放的數讀出,賦值(寫)給b*pa=200; //等價于a=200,*pa代表的就是a空間,然后對其進行寫操作 b=*pa; //等價于b=a,*pa代表的就是a空間,然后從a空間讀數據,寫入b變量

    傳遞指針

    #include<stdio.h>void fun(int *pa,float *pb) {*pa=200;*pb=300.60;} int main() {int a=10;float b=0.56;fun(&a,&b);printf("in main a=%d\n",a);printf("in main b=%f",b);return 0; }

    等價于

    #include<stdio.h> #include<string.h>void fun(int *pa,float *pb) {*pa=200;*pb=300.60;}int main() {int a=10;float b=0.56; // fun(&a,&b);int *pa=&a;float *pb=&b;fun(pa,pb);printf("in main a=%d\n",a);printf("in main b=%f",b);return 0; }

    傳遞普通數值與傳遞指針的異同

    (1)相同點
    都是將實參的數賦值給形參變量。
    (2)區別
    前者傳遞的是一個普通的數,后者傳遞的是門牌號,即地址(指針),可以通過地址操作它指向的變量空間。

    指針的含義

    a.指針是一個數
    指針是一個地址,變量的指針指的都是變量第一個字節的地址。
    地址(指針)具備指向作用

    b.指針變量
    指針變量是一個變量,用來存放指針(地址),指針變量不具有指向作用,指針變量只是用來存放地址。指針變量因為存放地址才有了指向作用,指針變量存放的指針具有指針作用
    指針和指針變量是兩個不同的概念,只是約定俗成,習慣統一稱為指針。

    提示:

    當一個指針變量里面存放指針這個數后,即這個指針變量指向了某個空間,但是你自己應該非常清楚,本質并不是指針變量指向某個空間,而是這個指針變量內存放的指針指向某個空間。

    連續內存

    //連續的動態分配 #include<stdio.h> #include<stdlib.h> int main(){ // int *p=(int *)malloc (5*sizeof(int)); // *(p+3)=3; // printf("%d",*(p+3));int number;printf("input student number:");scanf("%d",&number);int *p=(int *)malloc (sizeof(int)*number);for(int i=0;i<number;i++){printf("input %d someone's grade:",i+1); // scanf("%d",&p[i]);scanf("%d",p+i);} //輸出for(int i=0;i<number;i++){printf("%d\t",p[i]);//*(stu+i) } printf("\n");return 0; }

    內存單一

    //單一元素 #include<stdio.h> #include<stdlib.h> int main(){int *p=(int *)malloc(sizeof(int));*p=3;printf("%d",*p);return 0; }

    總結

    以上是生活随笔為你收集整理的C/C++ 指针的深入理解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。