十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
01
专注于为中小企业提供成都网站制作、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业中牟免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
指针函数通常是指函数返回值是指针的一类函数,如图所示。
02
函数指针是指指向某个具体函数的指针变量,在程序设计时可以用来调用某个特定函数或者做某个函数的参数。其形式一般如图:
03
指针函数与函数指针本质上的区别是,指针函数是一个带指针的函数,总的来说还是一个函数,如图就是一个带*name指针的函数
04
函数指针是指向函数的指针变量,本质上还是一个指针,其格式如下,可以看到和指针函数的格式非常像,所以一定要用心留意。
char *match (char*s,char ch1,char ch2)
函数各部分的含义:
第一个char,一般是代表函数的返回值是一个字符。但是它后面有一个*,应该把char和*连起来看,就是char*了。
那么,第一个就是char*,代表函数的返回值是一个字符指针(地址)。
match是函数的名字。
括号内是函数的参数,多个参数用逗号分隔。本例共有3个参数:char*s,char ch1,char ch2,第一个是s,类型为char*型(字符指针型),后两个ch1、ch2都是char型(字符型)。
到这儿,你就知道去掉*match前的*为什么就不对了。
另外,括号里参数类型(如包含指针)跟函数返回值的类型无关。函数名前加不加*只与函数返回值的类型有关。
/*
1 2 7 6 5 4 3 8 9 10
Press any key to continue
*/
#include stdio.h
void sort(int a[],int n) {
int i,j,t,k;
for(i = 0;i n - 1;i++) {
k = i;
for(j = i + 1;j n;j++)
if(a[k] a[j]) k = j;
if(k != i) {
t = a[i];
a[i] = a[k];
a[k] = t;
}
}
}
int main() {
int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(aa + 2,5);
for(i = 0;i 10;i++)
printf("%d ",aa[i]);
printf("\n");
return 0;
}
有多处错误,主程序中只有一处,但调用函数错得挺多的,最主要的是对结构指针的运用,
stu *p 下,引用其数组不能用(*p)[xx],因为p本身就是结构数组的首址,所以直接用p[xx]即可访问定义的所有单元。
以下将你的程序依原风格进行修改,主程序中将修改前的错误代码罗列于右,而order函数因为修改的地方多所以不再提示修改处:
#includestdio.h
typedef struct student
{
int num;
char name[20];
int a,b,c;
double ave;
}stu;
stu order(stu *p,int n);
int main()
{
stu s[6]; /*改为s[5]*/
int i;
for(i=0;i5;i++)
{
printf("input num:");
scanf("%d",s[i].num);
getchar();
printf("name:");
scanf("%s",s[i].name); /*原为scanf("%s",s[i].name); */
printf("a\tb\tc\n");
scanf("%d%d%d",s[i].a,s[i].b,s[i].c); s[i].ave=(s[i].a+s[i].b+s[i].c)*1.0/3;
}
order(s,5);
printf("num\tname\ta\tb\tc\n");
for(i=0;i5;i++)
{
printf("%d\t%s\t%d\t%d\t%d\t%lf\n",s[i].num,s[i].name,s[i].a,s[i].b,s[i].c,s[i].ave);
}
return 0;
}
stu order(stu *p,int n)
{
int j,k;
stu index;
for(j=0;jn-1;j++)
for(k=j+1;kn;k++)
if(p[j].avep[k].ave)
{
index=p[j];
p[j]=p[k];
p[k]=index;
}
}
首先来看一下int
*a(int
*b)这句的意思:
定义了一个返回值类型为整型指针(int*)的函数,函数名为a,这个函数需要传递一个参数b,该参数的类型也是整型指针(int*)。
所以调用该函数的地方应该传入一个整形指针。
这里强调一下指针的三个要点:①指针是一种特殊的变量;②指针这种变量存储的值为一个内存地址;③以指针变量的值为内存地址起始的若干字节存放着一个该类型的数。
第一个是在根据指针, 交换指针所指的数据
第二个虽然写的使用"指针"在实现, 实际上, 他是在奖p1 和p2两个本地的变量值进行交换, 而并不是奖两个地址所指向的内存单元进行交换
第二个函数你如果吧所有的int * 都改成int, 就能更清楚的看到他到底在干嘛了