C語言之初識指針

指針是什麼?

那到底什麼是指針呢,其實指針和之前學習的變量基本相似,不過變量裡面放的是一些值,而指針裡面放的是它所指的地方的地址。在聲明一個變量是,計算機就會為該變量預留一個位置,而指針所指☞的就是那個位置。

舉個例子:

int a = 10;//設置一個變量a的值為10

int *p = &a;//p這個指針裡面就放的是a的地址

而&這個符號,就是取地址符,就像我們在使用scanf函數時  scanf(“%d”,&a); 這個a前面的&是一個意思,就是獲取到某個變量的地址。

而當你創建瞭一個指針是,你就要給他賦地址,否則的話它就會像那種鼠標一樣在硬盤上亂找,就會隨機找個地址,所以我們在創建瞭指針時,就一定要給他去給他賦一個位置。

指針的基礎:

如何創建一個指針函數呢?

int p; 這是我們之前就知道的,創建一個整形變量p,而int *p; 就是設置一個指針p;關鍵就是在於中間的 *。所以我們在創建指針變量時,一定不要忘記 *;

指針的賦值:

可以在創建指針的時候就賦值像這樣:int *p = &a;  也可以在創建瞭之後單獨賦值像這樣: int *p;   p = &a;   兩種方法都一樣,沒有太大的區別,隻不過一個一行代碼,一個兩行代碼,如果我們之前已經創建瞭變量,那我們還是在創建指針的時候就直接給他賦值,以免後面忘瞭,對自己後續的程序發生影響。

那指針到底能幹什麼呢?

#include <stdio.h>
 
int main()
{
    int a = 10;
    int *p = &a;
    printf("a的地址為%p",&a);//這是直接輸出a的地址
    printf("a的地址為%p",p);//隻是輸出p的指針所指的地址
    printf("a的值為%d",*p);//輸出p的指針所指的地址中變量的值
 
    return 0;
}

通過這3個輸出函數我們可以知道,前兩個輸出的都是a的地址,而第三個輸出的則是a變量裡的值。

所以我們可以理解為 *p 就是 a 這個變量的值,這就是最通俗易懂的理解瞭。

並且在輸出 p 時也就是輸出 a 的地址時,也是有不同的輸出方式的,最基礎的就是

  • %lu 是十進制的方式輸出;
  • %p是以十六進制的方式輸出;

之前說到 *p 可以看作是它所指的 a 變量的值,所以它也是可以再重新被賦值的,當然它的賦值不是給指針函數賦值,看似是在給指針賦值,其實改變的還是它所指的函數的值;

像這樣

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

這個函數所輸出的值就會為 20 ;因為指針是之間在你的地址上給你改變,所以說指針的改變相比較之前的函數就會方便很多,比如我們在學習函數的時候,會將值從主函數傳到其他的函數中去做計算,但是傳回來時就很麻煩,因為它一次隻能傳回來一個值,但是指針就不一樣瞭,它不需要將值傳回來,直接時實時將它所指的值進行改變;

像接下來這個例子,我們之前也都用函數的方式寫過;

#include <stdio.h>
 
void swap(int* p, int* q)
{
	int temp;
	temp = *p;
	*p = *q;
	*q = temp;
 
}
int main()
{
	int a = 10, b = 20;
	swap(&a, &b);
	printf("a=%d  b=%d",a,b);
 
	return 0;
}

這個函數最後輸出的值為

可以看到,輸出的值已經發生瞭交換,這就是指針的強大之處吧;

可以更簡單的來解決我們之前遇到的問題,所以說,學好指針是學好c語言的基礎!

到此這篇關於C語言之初識指針的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: