程序中若有如下说明和定义语句:
char function(char *);
main() {
char *s="one", a[5]={0},(*f1)(char *)=function, ch;
...... }
以下选项中对函数function的正确调用语句是______。
A)(*f1)(a); B)*f1(*s); C)function(&a); D)ch=*f1(s);
D)ch=*f1(s);
不知道你这个问题是否已经解决, 如果还没有解决的话:说白了数组是一个具有相同类型且有序的构造类型
#include<stdio.h>
int main() {
//首先定义一个数组
int name[] = { 1,2,3,4,5 };
printf("name:%p\n",name);
return 0;
}
打印结果:
name:012FF810
这就说明数组名是数组的唯一标识符 !
好,根据上述我们得知了数组名可以充当是首地址,那么我们又知道了数组是由若干个相同类型的元素组成的。我们大家把他们结合起来会得到什么呢?
当name[0]时: 是不是可以这么想我们在name的基础上移动了0个呢?毕竟name本身就是第一个元素啊!以此类推是不是就很好解释了呢?5个元素,但是i<5;
[ ]我们大家通常称为下标运算符。
可是他其实还有其他称呼哦(๑•ᴗ•๑)
那就是【**基址变址运算符**】
简单点讲就是:i[name]根据name这个基址按照移动i个步长
使用指针函数调用C语言程序的具体步骤如下:
1.定义指针函数类型,例如:
typedef void (*FuncPtr)(int* arr, int len); //这里以数组长度为参数举例
2.定义指向函数的指针变量,例如:
FuncPtr ptr = bubbleSort; //将指针变量指向冒泡排序函数bubbleSort
3.通过指针变量调用相应的函数,例如:
int arr[] = {10,6,9,3,5,2};
int len = sizeof(arr)/sizeof(arr[0]);
ptr(arr, len); //使用指针函数调用冒泡排序函数,对数组进行排序
完整的示例代码如下:
#include <stdio.h>
typedef void (*FuncPtr)(int* arr, int len); //定义指针函数类型
void bubbleSort(int *arr, int len) //冒泡排序函数
{
int i,j,flag;
for(i=0;i<len;i++) /*外层循环比较的次数*/
{
flag=0;
for(j=len-1;j>i;j--) /*内层循环比较的范围*/
{
if(arr[j-1]>arr[j])
{
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
flag=1;
}
}
if(flag==0)
return;
}
}
int main()
{
int arr[] = {10,6,9,3,5,2};
int len = sizeof(arr)/sizeof(arr[0]);
FuncPtr ptr = bubbleSort; //定义指向函数的指针变量,指针变量指向冒泡排序函数bubbleSort
ptr(arr, len); //使用指针函数调用冒泡排序函数,对数组进行排序
int i;
for(i=0;i<len;i++)
{
printf("arr[%d]=%d\n",i,arr[i]); /*输出排序后的数组*/
}
return 0;
}