当前位置:首页 » 编程语言 » 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在函数内部是可以赋值的。

热点内容
threadc语言 发布:2025-07-14 17:13:23 浏览:166
rap加密 发布:2025-07-14 17:10:28 浏览:674
英雄联盟和吃鸡哪个吃配置 发布:2025-07-14 17:01:32 浏览:96
访问罗晋 发布:2025-07-14 17:00:04 浏览:395
逍遥西游辅助脚本 发布:2025-07-14 16:56:57 浏览:585
java默认类 发布:2025-07-14 16:51:03 浏览:279
术后解压 发布:2025-07-14 16:39:47 浏览:660
手机版我的世界怎么输入服务器ip 发布:2025-07-14 16:25:21 浏览:722
pythonsysstdout 发布:2025-07-14 16:15:29 浏览:197
ef数据库更新模型 发布:2025-07-14 16:14:05 浏览:411