初入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);
}
輸出結果
很顯然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);
}
輸出結果
原因是因為在函數中并沒有生成兩個新的整型變量而是指針變量,指針通過索引位址直接修改了主函數中變量所在位址的值。
ps.指針讓函數通過自己的局部變量改變整個main函數中的值