溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中如何使用指針

發(fā)布時間:2022-03-04 14:12:33 來源:億速云 閱讀:143 作者:小新 欄目:開發(fā)技術

這篇文章將為大家詳細講解有關C語言中如何使用指針,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

    指針總結

    部分筆記來源于王道C語言訓練營

    指針:變量的地址
    指針變量:一個變量專門用來存放另一變量的地址

    C語言中如何使用指針

    C語言中如何使用指針

    C語言中如何使用指針

    1.指針的本質

    1.1 指針的定義

    C語言中如何使用指針

    通過取地址(指針)直接訪問變量
    通過指針變量間接訪問另一個變量

    C語言中如何使用指針

    1.2 取地址操作符與取值操作符

    C語言中如何使用指針

    注意:

    (1)指針變量前面的 ? * ? 表示該變量為指針型變量

    int* p=&i;	//變量名為 p,該變量為指向整型數(shù)據的指針類型(int*)

    (2)在定義指針變量時必須指定其類型

    float a;//浮點型變量
    int* p=&a; //錯誤,整型變量的指針

    (3)取地址運算符和取值運算符混用(兩運算符優(yōu)先級相同,應自右向左方向結合)

    float* p=&a;
    &*p;	//先解引用獲得變量a的值,再取該值的存儲地址,等價于&a
    *&a;	//先取得變量a的地址,再解引用獲得a的值,等價于a

    (4)連續(xù)定義多個指針變量

    int* a,b,c;	//錯誤,這里只有a為整型變量的指針,b,c均為整型變量
    int *a,*b,*c; //正確

    2.指針的使用場景

    2.1 指針的傳遞

    值傳遞

    C語言中如何使用指針

    C語言中如何使用指針

    點擊逐語句進入change函數(shù)體

    C語言中如何使用指針

    C語言中如何使用指針

    C語言中如何使用指針

    進入函數(shù)體后點擊逐過程

    C語言中如何使用指針

    C語言中如何使用指針

    C語言中如何使用指針

    為解決以上問題,引出指針傳遞

    C語言中如何使用指針

    C語言中如何使用指針

    C語言中如何使用指針

    2.2 指針的偏移(指針的加減)

    C語言中如何使用指針

    C語言中如何使用指針

    C語言中如何使用指針

    2.3 指針與自增、自減運算符

    ? * ? 和 + + ++ ++ 的優(yōu)先級相同,混合使用是自右向左看

    分析時第一步:先去掉后增或后減
    分析時第二步:前面符號的優(yōu)先級是否高于后增/后減的優(yōu)先級,若是則先執(zhí)行前面,否則先執(zhí)行后面

    C語言中如何使用指針

    j=*p++;	等價于 j=*p; p++;

    C語言中如何使用指針

    j=(*p)++; 等價于 j=*p; (*p)++;	

    C語言中如何使用指針

    int a[3]={2,7,8};
    int* p;
    p=a;
    //p[0]等價于*p
    j=p[0]++;	//等價于 j=p[0]; p[0]++;	

    C語言中如何使用指針

    C語言中如何使用指針

    2.4 指針與一維數(shù)組

    函數(shù)調用的本質是值傳遞(實參賦值給形參)

    數(shù)組名在傳遞過程中是弱化為指針的

    C語言中如何使用指針

    2.5 指針與動態(tài)內存申請(malloc)

    C語言的數(shù)組長度固定是因為其定義的整型、浮點型、字符型變量,數(shù)組變量都在??臻g中,而??臻g的大小在編譯時是確定的。如果使用的空間大小不確定,那么就要使用堆空間

    程序是放在磁盤上的有序的指令集合

    程序啟動起來才叫進程

    #include<stdlib.h>
    void *malloc(size_t size);	//malloc在向堆申請空間,不使用時要釋放
    //void* 為無類型指針,并沒有規(guī)定指針指向什么類型的變量 
    //malloc并不知道我們申請的空間用來存放什么類型的數(shù)據,
    //所以確定要用來存儲什么類型后,都會將void*強制轉換為對應的類型

    C語言中如何使用指針

    申請堆空間

    C語言中如何使用指針

    C語言中如何使用指針

    釋放所申請的堆空間

    #include<stdlib.h>
    void free(void *ptr);

    C語言中如何使用指針

    free(p);
    p=NULL;	//如果不把p置為NULL,我們把 p稱為野指針
    ??臻g與堆空間的區(qū)別

    函數(shù)??臻g釋放后,函數(shù)內的所有局部變量消失。
    ??臻g會隨函數(shù)的結束而釋放

    C語言中如何使用指針

    C語言中如何使用指針

    堆空間不會因函數(shù)執(zhí)行結束而釋放

    C語言中如何使用指針

    2.6 字符指針與字符數(shù)組的初始化
    char* p="hello";	//字符指針,把字符串常量"hello"的首地址賦給p
    char c[10]="hello";	//字符數(shù)組初始化,等價于 strcpy(c,"hello")

    C語言中如何使用指針

    C語言中如何使用指針

    C語言中如何使用指針

    C語言中如何使用指針

    C語言中如何使用指針

    3.二級指針

    二級指針只服務于一級指針的傳遞與偏移

    3.1 二級指針的傳遞

    要想在子函數(shù)中改變一個變量的值,必須把該變量的地址傳進去
    要想在子函數(shù)中改變一個指針變量的值,必須把該指針變量的地址傳進去

    int* p;
    int **p1;
    p1=&p;	//二級指針的初始化一定是某一個一級指針取地址,&p就是一個二級指針類型

    二級指針示例:

    C語言中如何使用指針

    C語言中如何使用指針

    一級指針示例:

    C語言中如何使用指針

    關于“C語言中如何使用指針”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI