c語言指針數組參數
⑴ 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在函數內部是可以賦值的。