天天看點

初入c語言指針初入c語言指針初入指針

初入c語言指針

文章目錄

  • 初入c語言指針
  • 初入指針
      • 擷取位址(查找位址&運算符)
      • 取位址值(索引值,間接運算符*)
      • 指針變量
        • 指針的聲明
        • 指針在函數中通信

初入指針

擷取位址(查找位址&運算符)

如果a是一個變量名,&a就是a這個變量的位址。

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

%p用于輸出變量的位址

取位址值(索引值,間接運算符*)

又稱解引用運算符

ps,星号後跟一個位址或指針名,取出存儲在指針指向位址的值

int a = 5;
int *p = &a;

           

輸出 *p=5讀取了指針p指向位址的值

指針變量

指針一個值為記憶體位址的變量,用于儲存變量位址,當主調函數不使用return傳回值時必須通過位址修改主調函數的值。

ps.主調函數直接通過位址索引修改主函數中變量的值。

int a = 5;
int *p = &a;
           

指針的聲明

指向記憶體位址存儲值的類型 指針變量名

int *p  //指向變量類型為int類型的整型
int* *p1  //指向指針變量
int** *p2  //指向指針變量的指針變量
           

int*為指針變量的儲存類型

int** 為指向指針變量的指針變量的儲存類型

指針在函數中通信

#include <stdio.h>
int swap(int x, int y)
{
    int temp;
    temp = x;
    x = y;
    y = temp;
    printf("交換後的數值%d,%d", x, y);
    return 0;
}
int main()
{
    int x = 1;
    int y = 2;
    swap(x, y);
    printf("交換後的數值%d,%d", x, y);
}
           

輸出結果

初入c語言指針初入c語言指針初入指針

很顯然swap函數将數字調換但是主函數中x,y并未改變,當函數調用之後函數中聲明變量會消失。

如果用指針作為形參傳入函數就不一樣了

#include <stdio.h>
int swap(int *x, int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
    return 0;
}
int main()
{
    int x = 1;
    int y = 2;
    swap(&x, &y);
    printf("交換後的數值%d,%d\n", x, y);
}
           

輸出結果

初入c語言指針初入c語言指針初入指針

原因是因為在函數中并沒有生成兩個新的整型變量而是指針變量,指針通過索引位址直接修改了主函數中變量所在位址的值。

ps.指針讓函數通過自己的局部變量改變整個main函數中的值

繼續閱讀