1. 程式人生 > 其它 >c語言指標的傳引用

c語言指標的傳引用

技術標籤:C語言基礎知識筆記指標c語言

c語言指標的傳引用

歡迎關注AWP資訊
當我們想要實現一個如下功能的程式:

在main函式中呼叫另一個遞增函式,實現變數的遞增,我們在初學時或小白狀態時,可能會寫出如下程式碼:

#include <stdio.h>

void add(int a)
{
	a = a+1;
}

void main(void)
{
	int a = 10;
	
	add(a);
	printf("a = %d\n",a);
}

在我們理解的C語言或程式的執行後我們知道,a的值不會隨著add函式遞增變為11,最終打印出的值為10,我們執行看一下結果

在這裡插入圖片描述

打印出來的結果是10,並不是我們期望的11。這裡留給我們思考的就是這裡傳的值跑哪去了,要想理解其中的奧妙,首先要明白雖然在main函式中的變數a和add函式中的a同名,但是這兩個變數的地址是不同的,這裡函式執行時只將值傳進去了,而沒有改變main函式中變數a的值,這兩個變數是不同的變數,分別位於不同的地址空間,所以打印出來的是10。再執行下面一段函式,分別看一下地址和值為多少

#include <stdio.h>

void add(int a)
{
        a = a + 1;
        printf("add:address a = %d,vaule a = %d\n"
,&a,a); } int main() { int a = 10; add(a); printf("main:address a = %d,vaule a = %d\n",&a,a); return 0; }

在這裡插入圖片描述

從列印結果來看add中的地址和main中的地址是不同的,程式執行時只進行了傳值,改變的是不同地址空間上的值,對於main中的變數值仍然沒有改變,可以用如下圖來表示

在這裡插入圖片描述

兩個變數分別在不同的地址上,add函式中的值執行了a+1,a的值變為了11,而main函式中的a沒有執行運算,所以還是保持原來的值。那麼我們如何才能實現不用返回值呼叫add函式的功能,這裡就可以用指標的傳引用來實現,通過指標來傳址,程式碼如下

#include <stdio.h>

void add(int *p)
{
        *p =(*p) + 1;//變數地址上的值加1
        printf("add:address p = %d,vaule *p = %d\n",p,*p);
}

int main()
{
        int a = 10;

        add(&a);

        printf("main:address a = %d,vaule a = %d\n",&a,a);
        return 0;
}

列印結果如下

在這裡插入圖片描述

將變數a的地址傳入add函式,add函式對傳入的地址上的值進行運算操作,使得這一地址上的值改變,最終可以得到我們想要的+1結果。