C语言 怎么调用指针数组函数

作者&投稿:敛柏 (若有异议请与网页底部的电邮联系)
C语言怎么让“函数”返回“指针数组”~

你好

从问题来看,似乎你对于指针的概念没太理解。指针变量中存储的是内存中的地址,而实际的数据放在这个地址中。

按照这段代码来说,int* 声明的指针指向内存中的一块地址,而在这块地址中存储着一个整形数值。所以要返回这样的值,也就相当于是返回一个内存地址。因此,在程序中有两种具体的解决办法:

1.在调用函数的时候,直接将变量的指针(即内存地址)作为参数传入,在函数执行的时候,就会自动对内存中相应地址的数据进行操作。使用这种方法也就不需要返回值了。具体到这段代码中,就是在Main中声明int* tempA[10],把foo函数声明为void foo(int* a[10]),调用时用foo(tempA),在foo函数中直接使用a[10]即可。

2.直接把内存地址作为返回值,因为在C中,数组名就是数组首元素的指针,因此直接返回数组名就可以了,即return a即可。如果是普通变量,要用取内存地址的运算符&,比如声明了整型变量 int i,就可以return &i。这与printf函数中的使用方法是相通的。

【按照补充的内容:】

a-------->a1-------->i1
|-------->a2-------->i2
|……………………
|-------->an-------->im
这样的调用方法,只能保证a1-an不被修改,怎么保证i1-im不被修改?


希望以上回答能帮到你。【PS.很久没用C了,如果哪里出了差错,请指正。】

你原代码函数那样写是实现不了数组交换的,我用你的代码小做修改。你看下吧。
说明:^=只是利用异或来实现2个地址的数值交换,和你定义一个变量做交换是一个效果。

#include #include void change(int *p1,int *p2,int len){ while(len--) *p1^=*p2,*p2^=*p1,*p1^=*p2,p1++,p2++;}int main(){ int i; int a[5]={1,2,3,4,5}; int b[5]={6,7,8,9,10}; printf("交换前的a数据为:"); for(i=0;i<5;i++) printf("%d",a[i]); printf("
交换前的b数据为:"); for(i=0;i<5;i++) printf("%d",b[i]); change(a,b,5); printf("
交换后的a数据为:"); for(i=0;i<5;i++) printf("%d",a[i]); printf("
交换后的b数据为:"); for(i=0;i<5;i++) printf("%d",b[i]); return 0;}

1.函数指针的数组定义方法:返回值类型( * 指针变量名[Number]) (形参列表)。
例如:
double add(double a,double b){};
double sub(double a,double b){};
double mul(double a,double b){};
double div1(double a,double b){};
double (*oper_func[])(double, double) = {add,sub,mul,div1};//函数指针的数组定义

2.函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。

3.函数指针的声明方法为:
返回值类型( * 指针变量名) (形参列表);
“返回值类型”说明函数的返回类型,“( * 指针变量名)”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f = func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = &func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
例子:

#include<stdio.h>
int max(int x,int y){return (x>y? x:y);}
int main(){
    int (*ptr)(int, int);
    int a, b, c;
    ptr = max;
    scanf("%d%d", &a, &b);
    c = (*ptr)(a,b);
    printf("a=%d, b=%d, max=%d", a, b, c);
    return 0;
}


指针数组 就是有一个数组,数组中的元素都是指针,这些指针有相同的类型
int *a[3];
char *b[4];
double *c[5];
--------------------------------------------------------
char paixu(char *a[5]) //这样才是字符串数组
{
int i,j;
char *p;
for(i=0;i<5;i++)
{
for(j=0;j<4-i;j++)
{
if(strcmp(a[j],a[j+1])>0)
{
p=a[j]; a[j]=a[j+1]; a[j+1]=p;
}
}
}
}

#include<stdio.h>
#include<string.h>

void paixu(char **a)
{
int i,j;
char *p;
for(i=0;i<5;i++)
{
for(j=0;j<4-i;j++)
{
if(strcmp(a[j],a[j+1])>0)
{
p=a[j];
a[j]=a[j+1];
a[j+1]=p;
}

}
}
}
void main()
{
char *a[]={"Hongkong",
"Singgapore",
"Beijing",
"London",
"Washington"
};
int i;
printf("输出地址\n\n");
for(i=0;i<5;i++)
{
printf("%s \n",a[i]);
}
paixu(a);
printf("最终排序是\n\n");
for(i=0;i<5;i++)
{
printf("%s \n",a[i]);
}

}

main函数中a是常指针,它指向一组数组,这组数组每个元素又是指向字符串的指针,所以数组中每个元素的类型是char* , 因此变量a的类型是(char*)*,即char**.排序没有必要返回char吧(完成排序功能还用返回一个字符么?),函数参数改为char**类型,这样才能将指针数组首地址传入函数.
向函数里传入的是数组指针,我更改的是数组元素,这是明显的按地址传递方式传递参数,还用再return么.


夏县19218901695: C语言 怎么调用指针数组函数
龙沾呋麻: #include<stdio.h>#include<string.h> void paixu(char **a) {int i,j;char *p;for(i=0;i<5;i++){for(j=0;j<4-i;j++){if(strcmp(a[j],a[j+1])>0){p=a[j];a[j]=a[j+1];a[j+1]=p;}}} } void main() {char *a[]={"Hongkong","Singgapore","Beijing","...

夏县19218901695: 51单片机中,指针函数 在C语言程序 如何使用? -
龙沾呋麻: 你好,比较方便的实现方式是在函数的外部申请数组;在调用函数的时候传入数组的地址进行操作.如果一定要在子函数内部申请空间并返回地址,那么需要在子函数内部动态申请内存空间.具体的方法一般是使用标准库中的malloc函数.对于c51函数库,参考这个链接:http://www.keil.com/support/man/docs/c51/c51_malloc.htm

夏县19218901695: c语言中如何通过二级指针来操作二维数组 -
龙沾呋麻: 1、首先我们打开电脑里的C语言软件,新建一个工程和.c文件,输入头文件和主函数. 2、然后我们输入图示代码初始化数组,定义变量类型. 3、然后我们输入图示代码用for语句实现数组的访问. 4、然后我们输入图示代码进行输出. 5、然后我们输入图示代码编译、运行,即可通过二级指针来操作二维数组.

夏县19218901695: 在c语言的主函数中如何将一个数组作为指针赋值给调用的函数? -
龙沾呋麻: average(&score)或average(score)都可以.意思一样.

夏县19218901695: 在C语言中如何调用双指针函数? -
龙沾呋麻: 传值给二级指针,需要先定义一个一级指针变量,再把这个指针变量的地址传进去.如:int *pBigger= &bigger; max( &x, &y, &pBigger); 不能写成:max( &x, &y, &(&bigger) )&(&bigger)理解上是取两次地址,但&bigger是取地址并不会返回一个此地址的变量(指针变量);

夏县19218901695: 在C语言中,指向函数的指针怎么调用函数? -
龙沾呋麻: 如果存在函数指针p,以*p取函数指针的值,然后加上参数列表调用即可. 即 ret = (*p)(arg_list); 如,p为int (*)(int)类型的函数指针,那么 int a = (*p)(10); 这样就是一次典型的函数指针调用.

夏县19218901695: (C语言)返回指向数组的指针的函数 -
龙沾呋麻: 第二种方法是因为类型不匹配(double*与(double(*)[ROW])产生错误,而且((double (*)[row])matrix); 里的[row]是一个变量,而指向数组的指针 double (*matrix)[ROW]里的ROW只能使用常量,所以这里也有一个错误.由于指向数组的指针指向的数组长度(即第一维)必须是确定的常量,所以你这种行列皆不确定的数组不能用这种形式返回.我觉得用第一种形式好一点,访问二维数组a[i][j]可以转换成访问一维数组a[i*row+j];//row是列数 如果非要返回二维数组的话,我想用指针数组会好一点,不过分配空间的时候就麻烦一点.

夏县19218901695: C语言:数组或指针的函数调用
龙沾呋麻: #include <stdio.h> void main() { int SUM1(int *a); int SUM2(int b[]); int b[5]={1,2,3,4,5},*p; p=b; printf("%d\n",SUM1(p)); printf("%d\n",SUM2(b)); } int SUM1(int *a) { int sum=0,i; for(i=0;i<5;i++) sum=sum+*(a+i); return sum; } int SUM2(int b[]) { int sum=0,i; for(i=0;i<5;i++) sum=sum+b[i]; return sum; }

夏县19218901695: 如何在C函数中传递指向二维数组的指针参数 -
龙沾呋麻: 声明一个二维数组int matrix[100][100];当把二维数组作为参数传递的时候很多人可能一上来就这样写intfun(int **matrix)

夏县19218901695: C 语言中指针函数是如何调用的?? -
龙沾呋麻: 整个程序的目的是对一组数据进行求最大值、最小值或平均值的操作,通过输入的指令进行相应的操作.按照不用函数指针的思路,程序大概会写成这样:(以下为伪代码)最大值函数{...}

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网