欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

指向函数的指针数组的用法

时间:2024-07-10 08:21:24 其他范文 收藏本文 下载本文

下面是小编精心整理的指向函数的指针数组的用法,本文共4篇,希望能够帮助到大家。

指向函数的指针数组的用法

篇1:指向函数的指针数组的用法

声明一个指向函数的指针数组,并通过指针调用函数,

#includevoid f1;//函数f1的声明void f2();//函数f2的声明void f3();//函数f3的声明void main(){ void (*f[3])()={f1,f2,f3};//指向函数的指针数组的声明 int flag; printf(请输入一个1,2或者3.输入0退出.); scanf(%d,&flag); while(flag) { if(flag==1||flag==2||flag==3) { f[flag-1]();//通过函数指针调用数组中的函数 printf(请输入一个1,2或者3.输入0退出.); scanf(%d,&flag); } else { printf(请输入一个合法的数(1-3),0退出,); scanf(%d,&flag); } } printf(程序退出。);}void f1()//函数f1的定义{ printf(函数f1被调用!);}void f2()//函数f2的定义{ printf(函数f2被调用!);}void f3()//函数f3的定义{ printf(函数f3被调用!);}

程序运行结果:

注意:函数指针不能执行像fun+1、fun++、fun--等运算。

篇2:(C语言)字符串比较函数,指针数组与数组指针

问题描述:

写一个函数,用于比较两个字符串的比较(string_compare).

程序分析:

(1)主要思想:传入两个字符串后,比较这两个字符串中的每个元素,如果第一次比较就不相等,就不要让它进入到下面的比较中,这样一来,将它返回一个相减的值(即:两数组中开始不相等的那两个元素相减,返回值(int类型),是ASCII码值相减)。进入比较的过程中时,相等就返回0;其他情况都返回那个相减的值。

(2)主要方式:定义指针数组,并对其初始化。然后照上面的思想,进行代码的实现。

代码如下:

/***指针数组(1)int *a[10] 是一个指针数组--->是一个数组(每个数组中的元素都是int*类型)(2)int (*a)[10] 是一个数组指针--->指向一个数组(十个int类型的数组) 注意:*,[],的优先级依次递增。下面使用了指针数组的例子,至于数组指针。。**/#include#includeint string_compare(const char *str1,const char *str2){ assert(str1); //ASSERT( f ) assert(str2);/*在Debug模式下,每次运行到这里后会计算括号中的表达式,如果表达式为0,则中断执行,弹出一个警告框,用户可选择“继续”,“重试”,“忽略”在Release模式下,这句语句不会被编译进代码, ASSERT一般用于程序内部确认参数的正确性,即调用内部函数的时候,要由调用者保证参数的正确,而被调用函数内部,就可以通过ASSERT来检查参数是否满足要求。*/ while(*str1 == *str2 ) //判断两个数组中的元素是否相等 { str1++; //使两个指针指向下一位;继续比较 str2++; if(*str1 == '\0') //双方比较到'\0'处,都相等 { return 0; //返回0,表示二字符串相等 } } return *str1-*str2; //若不相等,返回一个正值或负值}int main(){ char *ch[2]; ch[0] = “ab”; //对这个指针数组的元素初始化,使其指向这个字符串首元素的首地址 ch[1] = “a”; //同上 printf(“%d\n”,string_compare(ch[0],ch[1])); //调用这个函数 return 0;}

篇3:c/c++中的字符指针数组,指向指针的指针的含义

就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针!

先看下面的代码,注意看代码中的注解!

#include

#include

usingnamespacestd;

voidprint_char(char* array[],intlen);//函数原形声明

voidmain(void)

{

//-----------------------------段1-----------------------------------------

char*a[]={“abc”,“cde”,“fgh”};//字符指针数组

char* *b=a;//定义一个指向指针的指针,并赋予指针数组首地址所指向的第一个字符串的地址也就是abc\0字符串的首地址

cout<<*b<<“|”<<*(b+1)<<“|”<<*(b+2)

//-----------------------------段2-----------------------------------------

char* test[]={“abc”,“cde”,“fgh”};//注意这里是引号,表示是字符串,以后的地址每加1就是加4位(在32位系统上)

intnum=sizeof(test)/sizeof(char*);//计算字符串个数

print_char(test,num);

cin.get;

//-------------------------------------------------------------------------

}

voidprint_char(char* array[],intlen)//当调用的时候传递进来的不是数组,而是字符指针他每加1也就是加上sizeof(char*)的长度

{

for(inti=0;i{

cout<<*array++<}

}

下面我们来仔细说明一下字符指针数组和指向指针的指针,段1中的程序是下面的样子:

char*a[]={“abc”,“cde”,“fgh”};

char* *b=a;

cout<<*b<<“|”<<*(b+1)<<“|”<<*(b+2)<

char *a[]定义了一个指针数组,注意不是char[], char[]是不能同时初始化为三个字符的,定义以后的a[]其实内部有三个内存位置,分别存储了abc\0,cde\0,fgh\0,三个字符串的起始地址,而这三个位置的内存地址却不是这三个字符串的起始地址,在这个例子中a[]是存储在栈空间内的,而三个字符串却是存储在静态内存空间内的const区域中的,接下去我们看到了char* *b=a;这里是定义了一个指向指针的指针,如果你写成char *b=a;那么是错误的,因为编译器会返回一个无法将char* *[3]转换给char *的错误,b=a的赋值,实际上是把a的首地址赋给了b,由于b是一个指向指针的指针,程序的输出cout<<*b<<“|”<<*(b+1)<<“|”<<*(b+2)<结果是>

abc

cde

fgh

可以看出每一次内存地址的+1操作事实上是一次加sizeof(char*)的操作,我们在32位的系统中sizeof(char*)的长度是4,所以每加1也就是+4,实际上是*a[]内部三个位置的+1,所以*(b+1)的结果自然就是cde了,我们这时候可能会问,为什么输出是cde而不是c一个呢?答案是这样的,在c++中,输出字符指针就是输出字符串,程序会自动在遇到\0后停止.

我们最后分析一下段2中的代码,段2中我们调用了print_array()这个函数,这个函数中形式参数是char *array[]和代码中的char *test[]一样,同为字符指针,当你把参数传递过来的时候,事实上不是把数组内容传递过来,test的首地址传递了进来,由于array是指针,所以在内存中它在栈区,具有变量一样的性质,可以为左值,所以我们输出写成了,cout<<*array++<

到这里这两个非常重要的知识点我们都说完了,说归说,要想透彻理解希望读者多动手,多观察,熟能生巧!

420){this.width=420}“ alt=”“ />

内存结构示意图!

//程序作者:管宁

//站点:www.cndev-lab.com

//所有稿件均有版权,如要,请务必著名出处和作者

篇4:C/C++中多维数组的指针作为函数参数传递

/*程序作者:管宁

站点:www.cndev-lab.com

所有稿件均有版权,如要转载,请务必著名出处和作者*/

#include

main()

{

void search_score(); /* 定义自定义涵数类型为不返回型 */

void count_avg(); /* 定义自定义涵数类型为不返回型 */

static float a[3][4]={{97,45.5,66,77},{88,92.5,78.5,66},{83,74.5,92,100}}; /* 输入3个学生的各自4门课的成绩 */

search_score(a,0); /* 调换自定义涵数显示其中一个同学的各门课成绩 */

count_avg(*a,12); /* 调换自定义涵数显示3个同学各门课的平均成绩成绩 */

/* 注意上面的*a其实也就是a[0]或者是&a[0][]0将这行改写成count_avg(a[0],12);或者count_avg(&a[0][0],12)也都是对的 */

}

void search_score(p,n)

float (*p)[4]; /* 定义一个指针变量p,说明它是一个指向一个包含4个整型变量一维数组的指针 */

int n; /* 定义形式参数n为整形 */

{

int i; /* 定义用于循环的变量i */

for (i=0;i<4;i++ ) /* 这里循环4次用于打印一个同学的4门课成绩 */

{

printf(”%7.2f“,*(*(p+n)+i));

}

printf(”\n“);

}

void count_avg(p,n)

float *p;

int n;

{

float *p_end;

float sum = 0;

float avg;

p_end = p+n-1; /* 计算出最后一个数组元素的地址 */

for (;p<=p_end;p++) /* 循环到最后一个元素地址就停止 */

{

sum += *p;

}

avg = sum/n;

printf(”avg=%7.2f\n",avg);

}

/*

注意此题的意思在于输入3个同4门课的成绩,计算出平均值和显示其中一个同学的4门课成绩,此例是对多维数组指针和多维数组

的指针作为涵数参数传递的总结,认真联系和体会可以很好的了解多维数组指针的概念到底是什么!

*/

C++函数指针详解

在C语言中什么是指针和数组等价

后缀数组

Python回调函数用法实例详解

指向的组诗

指针万用表实习心得体会

情境激发指向强化

补语的语义指向

幸福的指向美文

高数组教研工作总结

《指向函数的指针数组的用法(精选4篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

点击下载本文文档