C語言中
站在用戶的角度思考問題,與客戶深入溝通,找到沂水網站設計與沂水網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:網站制作、網站建設、企業官網、英文網站、手機端網站、網站推廣、主機域名、網頁空間、企業郵箱。業務覆蓋沂水地區。
指針做函數參數傳遞二維數組有兩種基本方法:
1、傳遞“數組指針”
#include stdio.h
void output( int (*pa)[3], int n )//這個函數只能輸出n行3列的二維數組
{
int i,j;
for( i=0;in;i++ ){
for( j=0;j3;j++ )
printf("%d ", pa[i][j] );
printf("\n");
}
}
void main()
{
int a[2][3]={
{1,2,3},
{4,5,6}
};
output(a,2);
}
2、傳遞“指針數組”
先將二維數組的行指針存儲到一個指針數組中,再將指針數組傳遞到子函數中去。
#include stdio.h
void output( int *pa[], int row,int col ) //這個函數更通用,但調用前,要做好準備工作。
{
int i,j;
for( i=0;irow;i++ ){
for( j=0;jcol;j++ )
printf("%d ", pa[i][j] );
printf("\n");
}
}
void main()
{
int a[2][3]={
{1,2,3},
{4,5,6}
};
int i;
int *pa[2];
for( i=0;i2;i++ )
pa[i]=a[i];
output(pa, 2, 3);
}
數組名就是指針,例如:
#include stdio.h
void?pr(char *p)
{
printf(p);
}
void main(void)
{
char s[] = "abc";
pr(s);
}
擴展資料:
注意事項
非數組類的聲明盡量以指針的方式進行比較好。倘若一個指針指向的內存并不是一個數組,那么采用數組名的聲明方式或許就會給人產生錯誤的引導。類似的,如果指向的是一個數組區域,則會給人以更加豐富的信息。例如:
int main(int argc,char* argv[])
{
/* code here */
}
與
int main(int argc,char** argv)
{
/* code here */
}
兩種方式完全等價,但是前面一種能夠更清晰地看出:這個參數是指向某個元素起始地址的指針,而后面的這種方式則不能夠直觀地看出這種含義。
問題在你這個函數的定義參數void find(float a[],float *pmax,float *pmin)
你在函數內對后2個參數直接進行了賦值。
{pmax=a[t];}
if(a[t]*pmin)
{pmin=a[t];}
你在函數內賦值并不會被外部的參數造成影響,你需要把用指針的引用才行
float* pMax, float* pmin
這樣在函數內的賦值才有效果
這是個函數指針 前面的void為返回值類型 后面的void*為參數類型.
函數指針是可以作為某個函數的參數的.
(1) 指向函數的指針變量的一般定義形式為:
數據類型 (*指針變量名)(函數參數列表)
函數名是可以缺省的 作為參數傳遞的時候會去調和 void*(*)(void*)這個類型相匹配的函數的
作為參數調用這個函數的時候 返回類型是void* 就相當于傳了一個參數類型為void*,當然這個函數指針的參數也是void*的
你的地址值傳遞錯誤,按照我給你修改的試試看,一定要注意你的實參傳遞的是地址還是具體的值,如果是地址,在子函數中就不要去修改你傳遞進來的地址。
int
main(void)
{
int
data=0;
//此處隨機分配內存空間,不要用指針
myStack=makeStack(myStack,top);
Push(myStack,3);
Push(myStack,8);
Push(myStack,19);
Push(myStack,31);
Push(myStack,43);
Push(myStack,36);
Pop(myStack,data);//此處,傳遞的是地址值
printf("%d
",data);
}
int*
Pop(LinkedStack
myStack,int
*data)
{
pStack
cursor=myStack;
if(Stack_Empty())
{
}
else
{
while(cursor-next!=top)
{
cursor=cursor-next;
}
*data=top-data;
//此處,只是在同一個內存空間修改其值,所以不要取地址
top=cursor;
return
data;
}
}
選D
因為第一個參數是地址傳遞,fun(b,a);中傳入a字符。*c=*c+1將c的值變為b字符。主函數的值改變。
第二個參數是值傳遞,所以在函數中d的值為B字符。但是并不影響主函數的值,所以主函數輸出a的值是A。b的值是b。
新聞標題:c語言函數指針傳參數,c語言指針作為函數參數傳遞
轉載來于:http://vcdvsql.cn/article18/hsojgp.html
成都網站建設公司_創新互聯,為您提供服務器托管、、響應式網站、網站制作、定制開發、品牌網站設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯