當前位置:首頁 » 編程語言 » c語言指針作為函數參數

c語言指針作為函數參數

發布時間: 2022-05-29 22:48:38

1. c語言 指針做函數參數 的優點

首先你要認識函數傳參是怎麼進行的

函數傳參是復制形的,舉個例子說:

void modify(int a)
{
a++;
}

void main()
{
int a=5;
modify(a);
printf("%d",a);
}
這個程序的答案還是5。為什麼?
因為當調用modify(a)時,在執行modify函數時,是另外開辟了一個內存空間,將main中a的值復制過來,modify函數中所有的操作都是相對於這個新開辟的內存空間而言的,對原來的a沒有任何改變。

現在就來說說指針,如果用指針傳參的話那就完全不一樣了,指針(pointer),說白了即是指向變數內存地址。同樣上面的例子:
void modify(int * a)
{
(*a)++;
}

void main()
{
int a=5;
modify(&a);
printf("%d",a);
}
這個答案當然是6
因為你傳進去的是a的地址,所以在modify函數中的操作都是對a地址上的內容進行操作,即是操作a所以modify函數不用返回這個數,main中a的值也會改變。因為大家都是操作同一個內存空間,而上面不用指針,modify操作的是另一個新開辟的內存空間,只是這個內存空間初始值和a一樣。

現在來說說傳參,其實你「為什麼函數參數是字元串的多用指針?」 那句我不是很明白,C中的字元串傳參好像就指針一種形式(除非用結構體)。
何時用指針,何時用拷貝。當傳的參數是一個結構體,而這個結構體比較大,這時最好用指針,因為如果用拷貝的話,單單花在拷貝的時間就要浪費很多,而如果這個函數經常被調用,那麼這效率問題就出現了。

你在子函數中要對你的主調用函數中變數進行操作時也可以用指針做參數,這樣子函數就可以不用return 如果不是用指針的話,就要再子函數的未尾加上一條return x;把這個數返回當返回值。

多看點書,多寫點程序,剛開始學都會對指針比較迷茫。寫多了,自然而然就懂了。

2. C語言用指針作函數參數

選D
因為第一個參數是地址傳遞,fun(&b,a);中傳入a字元。*c=*c+1將c的值變為b字元。主函數的值改變。
第二個參數是值傳遞,所以在函數中d的值為B字元。但是並不影響主函數的值,所以主函數輸出a的值是A。b的值是b。

3. C語言的指針作函數參數

改成下面代碼看看:

#include<stdio.h>

voidabc(int*i,int*j)

{

intm;

m=*i;//指針變數的值也就是地址不能賦值給一般變數
*i=*j;//*i,*j才是指針變數指向的變數的值
*j=m;

}

voidmain()

{

inta,b;

int*pa=&a,*pb=&b;

printf("請輸入a,b的值:");

scanf("%d,%d",&a,&b);

abc(pa,pb);//

printf("a=%d b=%d ",a,b);

}

4. c語言指針的指針做函數參數

定義sort函數時使用的參數是指針,需要注意的是這個指針是指向數組的,數組的名稱其實就是一個指針,所以p可以做sort的參數

5. c語言中用指針變數做函數參數有什麼意義

看你的需要了,有時不用指針作為參數達不到你要的效果,比如一個swap()函數。
int
swap(int
a,int
b)
{
int
tmp;
tmp=a;
a=b;
b=tmp;
}
如果你想調用該函數交換兩個變數的值,在主函數中輸出,那是不可能的。比如這樣調用:
int
x=1,y=2;
swap(x,y);
printf("%d
%d",x,y);
你認為會輸出2
1嗎?錯!還是會輸出1
2的。因為傳入swap()函數的只是x,y的拷貝,而不是它們自身。
如果要真正達到交換的目的,就要用指針傳值。這樣定義函數:
void
swap(int
*a,int
*b)
{
int
tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
但是給函數傳值時要注意,指針是指向地址的,所以參數要是地址,即需要給變數取地址。
int
x=1,y=2;
swap(&x,&y);
printf("%d
%d",x,y);
這樣就是輸出2
1了!

6. C語言中指針作為函數參數的問題。

O(∩_∩)O哈哈~。在函數聲明和定義時Fun(int p1,int p2)是不是表示它的參數是兩個int型的整數。Fun(int* p1,int* p2)則使表示它的參數是兩個指針類型的。定義和聲明時的變數只是代替符,其它的運算符號與類型符號加起來才是參數類型。你如果覺得不好理解,那麼在寫的時候就把int 和*放在一起(int*),這就是參數類型。

7. c語言中指針作函數的參數是怎麼回事有點不懂!!!

如果使用指針作為參數就是地址傳遞,否則只是值傳遞。你可以看下下面的這個函數:
void modify(int a)
{
a++;
}

void main()
{
int a=5;
modify(a);
printf("%d",a);
}
這個程序的答案還是5。為什麼?
因為當調用modify(a)時,在執行modify函數時,是另外開辟了一個內存空間,將main中a的值復制過來,modify函數中所有的操作都是相對於這個新開辟的內存空間而言的,對原來的a沒有任何改變。

現在就來說說指針,如果用指針傳參的話那就完全不一樣了,指針(pointer),說白了即是指向變數內存地址。同樣上面的例子:
void modify(int * a)
{
(*a)++;
}

void main()
{
int a=5;
modify(&a);
printf("%d",a);
}
這個答案當然是6
因為你傳進去的是a的地址,所以在modify函數中的操作都是對a地址上的內容進行操作,即是操作a所以modify函數不用返回這個數,main中a的值也會改變。因為大家都是操作同一個內存空間,而上面不用指針,modify操作的是另一個新開辟的內存空間,只是這個內存空間初始值和a一樣。

你在子函數中要對你的主調用函數中變數進行操作時也可以用指針做參數,這樣子函數就可以不用return 如果不是用指針的話,就要再子函數的未尾加上一條return x;把這個數返回當返回值。

8. C語言指針作為函數參數

#include<stdio.h>
int*fmax(int*,int*);/*函數的聲明和下面的定義參數類型不一致,應該改成指針類型*/
voidmain()
{
intx,y;int*c,*d;
int*pmax;
scanf("%d%d",&x,&y);
c=&x;
d=&y;
pmax=fmax(c,d);
printf("max=%d ",*pmax);
printf("max=%d ",*pmax);
}
int*fmax(int*a,int*b)
{
int*p;
p=*a>*b?a:b;
returnp;
}

9. C語言指針變數的賦值和做函數的參數

1、指針變數的賦值,分為定義時賦值(初始化)和單獨賦值,如:
int x ;
int * px=&x ; //定義時賦值,也稱初始化,注意這里的*是跟隨int的,即變數px是int *類型變數! 實際上的賦值語句是px=&x ;
int * py ;
py=&x ; //單獨賦值,將py指向x
*py=10 ; //這里的*,是引用指針中的數據操作符,*跟隨的變數必須是指針類型變數,否則會出錯! *py就是x,這里相當於x=10;
2、指針變數作為函數的參數時,子函數可以通過指針引用實參地址中的數據,達到修改實參地址中的數據。如:
#include <stdio.h>
void func( int a, int b, int *pmax )
{
if ( a>b ) *pmax=a;
else *pmax=b ;
}
void main()
{
int a=2,b=3,max=0;
func(a,b,&max ); //這里將變數max的地址傳遞到子函數,子函數中通過該地址,可以修改max的值,達到子函數結束後,max能帶回運算結果的效果。
printf("max=%d\n", max );
}

10. c語言中用一個函數指針作為另一個函數的參數,該怎麼解決

首先需要聲明函數指針的類型(下例子中的typedef int (*fpFunt)(int a,int b),再定義某個函數(下例中的Add),在其參數列表中使用該函數指針類型,同時需要定義另一函數(下例中的fpAdd,注意該函數形式要和fpFunt一致,本例子中是返回一個整數,兩個整型參數)作為實參用。這里在手機上使用易歷知食軟體內的微C程序設計來編程,舉個兩個數相加的例子,代碼如下圖:

熱點內容
樹莓派編程板 發布:2025-02-12 04:41:45 瀏覽:904
php取整 發布:2025-02-12 04:33:21 瀏覽:221
我的世界創造伺服器位置 發布:2025-02-12 04:24:49 瀏覽:701
毛利潤演算法 發布:2025-02-12 04:22:42 瀏覽:754
戰艦少女r紅茶腳本 發布:2025-02-12 04:05:05 瀏覽:465
峰火戰國伺服器什麼時候開 發布:2025-02-12 03:56:31 瀏覽:175
電腦配置慢怎麼解壓 發布:2025-02-12 03:52:18 瀏覽:716
androidsdk功能 發布:2025-02-12 03:43:07 瀏覽:87
阿里雲伺服器可以訪問外網嗎 發布:2025-02-12 03:42:20 瀏覽:880
腳本的生命周期順序 發布:2025-02-12 03:37:28 瀏覽:369