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在函数内部是可以赋值的。