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

c語言指針數組參數

發布時間: 2023-01-14 02:07:59

c語言中 指針做函數參數傳遞二維數組

C語言中
指針做函數參數傳遞二維數組有兩種基本方法:
1、傳遞「數組指針」
#include <stdio.h>
void output( int (*pa)[3], int n )//這個函數只能輸出n行3列的二維數組
{
int i,j;
for( i=0;i<n;i++ ){
for( j=0;j<3;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;i<row;i++ ){
for( j=0;j<col;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;i<2;i++ )
pa[i]=a[i];
output(pa, 2, 3);
}

⑵ 請問在C語言中,函數傳參時怎樣利用指針傳遞數組

數組名就是指針,例如:

#include <stdio.h>

voidpr(char *p)

{

printf(p);

}

void main(void)

{

char s[] = "abc";

pr(s);

}

(2)c語言指針數組參數擴展閱讀:

注意事項

非數組類的聲明盡量以指針的方式進行比較好。倘若一個指針指向的內存並不是一個數組,那麼採用數組名的聲明方式或許就會給人產生錯誤的引導。類似的,如果指向的是一個數組區域,則會給人以更加豐富的信息。例如:

int main(int argc,char* argv[])

{

/* code here */

}

int main(int argc,char** argv)

{

/* code here */

}

兩種方式完全等價,但是前面一種能夠更清晰地看出:這個參數是指向某個元素起始地址的指針,而後面的這種方式則不能夠直觀地看出這種含義。

⑶ 請教在C語言中,函數內的指針數組和函數的參數的指針數組的異同

main函數中 argv是數組名 數組名是一個常指針 不能被賦值 所以++不能用在main函數中的argv 編譯會提示main函數中的++需要左值。 而main1函數中的 形參是一個 指針變數 看被賦值 所以不會報錯 如果被調用函數main1中的形參argv也是長指針的話 當你調用函數main1函數的時候你的 實參就傳不過去了

⑷ C語言的 指針和數組問題及其指針作參數的程序

問題是什麼啊……
不是讓人讀代碼玩吧

⑸ c語言編程 指針數組作為函數參數

#include<stdio.h>
#include<string.h>
int main()
{
void sort1(char **p1);
void print(char **p2);
static char *name[]={"zhang","wang","li","zhao","abe"};
sort1(name);
print(name);
return 0;
}
void sort1(char **p1)
{
int i,j;
char *p;
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(strcmp(p1[i],p1[j])>=0)
{
p=p1[i];
p1[i]=p1[j];
p1[j]=p;
}
}
void print(char *p2[])
{
int i;
//getchar();
for(i=0;i<5;i++)
printf("%s\n",*(p2+i));
}

⑹ C語言使用數組指針參數傳遞

用指針傳遞一維數組。
#include <stdio.h>
#include <math.h>
float dist( float *p1, float *p2){
float d[3],ds;
int i;
for (i=0;i<3;i++) d[i] = p2[i]-p1[i];
ds = sqrt( d[0]*d[0]+ d[1]*d[1]+d[2]*d[2]);
return ds;
};
void vec( float *p1, float *p2, float *p3){
int i;
for (i=0;i<3;i++) p3[i]=p1[i]+p2[i];
}

int main()
{
float a[3],b[3],c[3];
int i;
printf("input x y z for point 1\n");
for (i=0;i<3;i++)scanf("%f",&a[i]);
printf("input x y z for point 2\n");
for (i=0;i<3;i++)scanf("%f",&b[i]);
printf("distence: %g\n", dist(a,b));
printf("\n");
vec(a,b,c);
for (i=0;i<3;i++) printf("%g ",c[i]);
return 0;
}

⑺ C語言指針數組做函數參數,與指針變數做函數參數

這就是傳值 和傳地址調用的區別。

要改變一個變數的值,到主調函數中也生效,那就必須穿地址(傳指針), 否則不行。
不過 並不是指針類型就可以,而必須是要修改類型的指針。
比如 你要修改int 就要傳int*
要修改 char * 就要傳char **
然後 在函數中改變參數指向空間的值,也就是修改*p的值。
在你第一個 修改的是char* 傳的是char** 這個是ok的

第二個
修改的是char 傳的是char * 這個也是對的,但函數裡面改變值的方法不對
改變的是u,v
而不說*u *v
如果改成
char temp;
temp=*u;
*u=*v;
*v=temp;
這樣就可以了。

記住兩點 要改變type型的值
一個是 傳的需要是type*的參數p
另一個 函數中 改變的要是*p的值。

⑻ C語言. 用指針與數組作為函數參數,按下面四種情況對數組float a[10]進行降序排序:

樓主,我只能實現1、4,我想,在C中應該不存在有2,3兩種情況吧,稍後來寫代碼。

第一種:

#include<stdio.h>

void Calculate(float *pfloat);

int main()
{
float a[10];
int i;

for(i=0;i<10;i++)
{
printf("Please Enter %d Data ",i+1);
scanf("%f ",&a[i]);
}
Calculate(a);
printf("Calculate After");
for(i=0;i<10;i++)
{
printf("%f ",a[i]);
}
getch();
return 0;
}

void Calculate(float *pfloat)
{
int i,j;
float ftemp;
for(j=0;j<10;j++)
{
for(i=1;i<10-j;i++)
{
if (*(pfloat+i-1) > *(pfloat+i))
{
ftemp=*(pfloat+i-1);
*(pfloat+i-1)= *(pfloat+i);
*(pfloat+i)=ftemp;
}
}
}
}

第四種

#include<stdio.h>

voidCalculate(float*pfloat);

intmain()
{
floata[10],*pfloat;
inti;

for(i=0;i<10;i++)
{
printf("PleaseEnter%dData ",i+1);
scanf("%f ",&a[i]);
}
pfloat=a;
Calculate(pfloat);
printf("CalculateAfter");
for(i=0;i<10;i++)
{
printf("%f",a[i]);
}
getch();
return0;
}

voidCalculate(float*pfloat)
{
inti,j;
floatftemp;
for(j=0;j<10;j++)
{
for(i=1;i<10-j;i++)
{
if(*(pfloat+i-1)>*(pfloat+i))
{
ftemp=*(pfloat+i-1);
*(pfloat+i-1)=*(pfloat+i);
*(pfloat+i)=ftemp;
}
}
}
}

⑼ C語言二位數組指針,參數傳遞問題

拜託,main的參數是在運行的時候輸入的,不能在main之中定義。要麼你去掉它們,直接在main中定義,比如
int
argc=4;
char
argv[4][2];
scanf("%s",argv[i]);
要麼你完全不定義,直接在運行的時候輸入:
./****
ab
cd
ef
gh
那麼argv和argc會被自動初始化只不過執行文件的名字也會被包含進去,所以要忽略掉argv[0]。

⑽ C語言中 數組到底是不是指針和數組作為參數問題

數組名可以當做指針來運算,但數組名是指向數組首地址的指針常量,不可改變的。比如:
int a[10] = {1,2,3,4,5,6,7,8,9,0};

a是數組的首地址,是不可改變的常量,即a是不可賦值的,a = a+1; 是錯誤的。
當數組名作為函數的參數時,形參數組中的值發生變化,實參數組中的值也會隨之發生變化,因為兩個指針是指向同一塊地址的;實參數組名的固定常量,形參的數組名可以做指針變數處理。比如:
void fun(int arr[], int n){
arr = arr+1;

printf("%d\n", *arr);

}
其中arr在函數內部是可以賦值的。

熱點內容
安卓備忘錄怎麼轉蘋果去 發布:2025-07-14 20:57:16 瀏覽:114
加密貨幣app 發布:2025-07-14 20:46:57 瀏覽:553
醫院防汛演練方案與腳本 發布:2025-07-14 20:41:11 瀏覽:778
公網ip做域伺服器地址 發布:2025-07-14 20:40:13 瀏覽:52
php獲取幾 發布:2025-07-14 20:22:20 瀏覽:376
舊安卓如何刷入最新安卓 發布:2025-07-14 20:16:14 瀏覽:763
伺服器或網路不給力是什麼意思 發布:2025-07-14 20:15:36 瀏覽:318
爬網站資料庫 發布:2025-07-14 20:15:20 瀏覽:520
邵雍的演算法 發布:2025-07-14 20:13:49 瀏覽:119
離線燒錄加密 發布:2025-07-14 20:12:13 瀏覽:620