日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言?從根本上理解指針_C 語言

作者:清風自在?流水潺潺 ? 更新時間: 2022-06-18 編程語言

一、* 的意義

  • 在指針聲明時,* 號表示所聲明的變量為指針
  • 在指針使用時,* 號表示取指針所指向的內存空間中的值

如下:

int i = 0;
int j = 0;
int* p = &i; //指針聲明
j = *p; //取值

變量 p 保存著變量 i 的內存地址,即:p <--> &i *p <--> i

* 號類似一把鑰匙,通過這把鑰匙可以打開內存,讀取內存中的值。

下面看一個指針的使用示例:

#include <stdio.h>
int main()
{
    int i = 0;
    int* pI;
    char* pC;
    float* pF;
    
    pI = &i;
    
    *pI = 10;
    
    printf("%p, %p, %d\n", pI, &i, i);
    printf("%d, %d, %p\n", sizeof(int*), sizeof(pI), &pI);
    printf("%d, %d, %p\n", sizeof(char*), sizeof(pC), &pC);
    printf("%d, %d, %p\n", sizeof(float*), sizeof(pF), &pF);
    
    return 0;
}

輸出結果如下:

所有 32 位系統上的指針變量占用內存大小都為 4 個字節。

二、傳值調用與傳址調用

  • 指針是變量,因此可以聲明指針參數
  • 當一個函數體內部需要改變實參的值,則需要使用指針參數
  • 函數調用時實參值將復制到形參
  • 指針適用于復雜數據類型作為參數的函數中

下面看一個利用指針交換變量的代碼:

#include <stdio.h>
 
int swap(int* a, int* b)
{
    int c = *a;
    
    *a = *b;
    
    *b = c;
}
 
int main()
{
    int aa = 1;
    int bb = 2;
    
    printf("aa = %d, bb = %d\n", aa, bb);
    
    swap(&aa, &bb);
    
    printf("aa = %d, bb = %d\n", aa, bb);
    
    return 0;
}

輸出結果如下:

三、常量與指針

const int* p; ? ?//p 可變,p 指向的內容不可變
int const* p; ? ?//p 可變,p 指向的內容不可變
int* const p; ? ?//p 不可變,p 指向的內容可變
const int* const p; ? ?//p 和 p 指向的內容都不可變

口訣:左數右指

當 const 出現在 * 號左邊時指針指向的數據為常量,當 const 出現在 * 后右邊時指針本身為常量

下面通過一個例子加深理解:

#include <stdio.h>
 
int main()
{
    int i = 0;
    
    const int* p1 = &i;
    int const* p2 = &i;
    int* const p3 = &i;
    const int* const p4 = &i;
    
    *p1 = 1;    // compile error
    p1 = NULL;  // ok
    
    *p2 = 2;    // compile error
    p2 = NULL;  // ok
    
    *p3 = 3;    // ok
    p3 = NULL;  // compile error
    
    *p4 = 4;    // compile error
    p4 = NULL;  // compile error
    
    return 0;
}

輸出結果如下:

四、小結

  • 指針是 C 語言中一種特別的變量
  • 指針所保存的值是內存的地址
  • 可以通過指針修改內存中的任意地址內容

原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/123573522

欄目分類
最近更新