|
西交《程序设计基础》FAQ(六)
第六章 指针
一、请简述函数型指针和指针型函数的用法和区别。
函数指针即指向函数的“指针”,函数指针是函数的首地址(或称入口地址),它使该指针变量指向该函数,然后通过指针变量就可以找到并调用这个函数。例如:函数的指针形如:int (*p)();该p函数返回一个整型值。
指针的函数形如:int *p();即返回指针值的“函数”,该指针指向整型数据。换言之,指针函数就是返回值为指针的函数,一个函数经过运算之后得到的结果是一个指针(即地址)。一般的用法是求得这个指针再用它调取地址所存的值。
二、C语言中:数组指针与指针数组有什么区别?
A:数组指针是指向这个数组首地址的指针,指向对象是这个数组。指针数组是存放一类指针的数组,这个数组的每个元素都是一个指针。例如:
int a[10];
int* s;
s = a;//这里s就是一个数组指针,它的值就是数组a 的首地址;当然,如果a是一个整数,那s就是一个指向整型的指针;
int a;
int* s[5];
for(int i=0;i<5;i++)s[i]=a;
//这里s就是一个指针数组,它的每个元素都是整型变量a的地址三、指针数组是每个元素都是一个指针,分别x维数组每一行的首地址。行指针是指向数组的指针。我怎么感觉都差不多呢? 在c语言中,指针数组和行指针的区别是什么?
举个例子:
int(*p)[4],这个就是行指针。这种类型的指针p是指向一个一维数组,这个一维数组包含4个整形元素。
但是 int a[4];p=a; 这种方式却是不对的。因为p只能指向一个整型的一维数组,不能指向一个整型数据,a所指向的正是a[0],是个整型数;
实际上int(*p)[4]这种类型的指针是用于多维数组中的,比如定义一个二维数组int b[3][4],就可以这样赋值p=&b[0],使p指向一维数组b[0],而且p的增减是以一维数组的长度为单位的,比如p+1指向的就是b[1]了。
int *p[4]这个是指针数组了,首先弄明白这个是数组,里面存放的是指针也就是地址,这个地址所指向的是一个整型数据,你可以把p[0],p[1]....当作一个个的指针变量来使用。
关于这个问题,多看看指针那关于多维数组与指针的一节,做些练习自己验证几次就容易弄明白了。四、若函数fun的函数头为:int fun(int i,int j);且函数指针变量p定义如下:int(*p)(int i,int j);则要使指针p指向函数fun的赋值语句是:()。
Ans、p=*fun; B、p=fun; C、p=fun(i,j); D、p=&fun;五、函数指针p的定义:int(*p)(int i,int j)是什么意思呢?什么是指针p指向函数fun的赋值语句呢?
函数指针就是指向函数的指针的,函数指针p的定义:int(*p)(int i,int j)是指定了该指针能指向的函数的类型(包括参数、返回值类型)。
指针p指向函数fun的赋值语句为 p=fun 也是好理解的,因为我们知道函数名本身就是函数入口地址,所以不必加&之类的。
本内容由易百网整理发布
网址 www.openhelp100.com
联系方式QQ 515224986
|
|