西交《程序设计基础》第六章 指针
发布时间:2024-01-10 09:01:32浏览次数:46西交《程序设计基础》第六章 指针一、请简述函数型指针和指针型函数的用法和区别。函数指针即指向函数的“指针”,函数指针是函数的首地址(或称入口地址),它使该指针变量指向该函数,然后通过指针变量就可以找到并调用这个函数。例如:函数的指针形如: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 也是好理解的,因为我们知道函数名本身就是函数入口地址,所以不必加&之类的。