导航:首页 > 净水问答 > c语言过滤函指针写法

c语言过滤函指针写法

发布时间:2022-09-24 14:57:59

⑴ 编写一个C语言函数,从一个字符串删除所有的尾随空格,使用指针编写

指针数组:
一个数组,其每个元素都是指针
数组指针:一个指针,指向一个数组(一般把数组首地址赋给指针)

函数指针:一个指针,指向一个函数(一般把函数栈的首地址赋给指针)
指针函数:
一个函数,
返回值类型为指针

字符串指针:一个指针,指向一个字符串(一般是把字符串的首地址赋给指针)

告诉你理解的方法:
短语名词中
第二个名词是主体,前面的是修饰的。

⑵ C语言函数指针问题

事实上使用函数指针的时候
fun('a')
(*fun)('a')
(fun)('a')
效果都是一样的。
fun和*fun的值也是一样的。可能是为了c语言版本兼容性之类的原因(也许不同时期c语言规定函数指针的写法不一样吧,就如同早期版本函数传参数的写法是不一样),编译器进行了优化,都接受这些写法罢了。
其实只需要知道,函数指针只是一个特殊的指针,这个指针指向的地址必须是函数的地址就可以了。不需要深究的。使用的时候,就当作函数,函数怎么调用就怎么用。所以我一般在用指针函数的时候都是
fun('a'),就把它当成函数,感觉这样比较容易理解。

⑶ c语言函数用到指针的时候怎么写是传入指针变量的值,怎么写是传入指针指向的值

访问指针变量的值:在变量名前面加*
int 到string无法赋值,因为类型不同。
转义字符是在字符无法表示的情况下借助字符中的字母前面加“\”来表示如回车符的转义字符是'\n'。

⑷ C语言关于调用函数指针指向的函数的写法。

不存在正规与不正规问题,但前一种写法(a=ACC(22,33); )可读性要更好一些。

⑸ C语言指针,这两种写法为什么错

swap(int
*pt1,int
*pt2)
{int
*temp;
temp=pt1;
pt1=pt2;
pt2=temp;
}
因为第二种的指针temp没有初始化是不对的.
也就像楼上说的,它们只改地址的位置,不改变内容.可是,像我上面说的.最后没有初始化temp也是种错误.

⑹ C语言指针写法

问题1那样写是错误的。问题2那样写也是错误的,数据类型不匹配。
补充问题29是指针初始化的定义方式阿,p是指针类型,初始化时赋值就需要为选项D形式,若在初始化时未赋值,则可以写成:
float *p;
int x=1;
p=&x;
形式。

⑺ C语言指针的用法

#include<stdio.h>
#include<math.h>
#include <conio.h>
void sort(char *a[],int n)
{
int i,j;
char *temp;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(strcmp(a[i],a[j]<0))
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}

int main()
{
char *a[3];
int i;
for(i=0;i<3;i++)
a[i] = (char *)malloc(sizeof(char));
for(i=0;i<3;i++)
scanf("%s",a[i]);
sort(a,3);
for(i=0;i<3;i++)
printf("%s\n",a[i]);
getch();
}
应该改成这样
其中
char *temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
做了修改

原因如下:未修改前temp是一个字符变量,而*a[i]是指针a[i]所指向的内容,就把需要交换的字符串的首字符交换了。
你要交换的是指针或者说是地址,而不是指针里的内容。这就是问题所在。
在temp前加*就表示temp也是个指针,再把a[i]前的*去掉,就实现了交换指针地址的目的。

指针的声明要加*例如
int *a;
使用的时候如果事指针操作则不要带*例如
char *a = “hank”;
a++;此时a指向的字符串就变成了“ank”
涉及到指针指向的内容的要加*例如
char b = *a;

指向数组的指针,例如
int b[10];
int *a = b;
a就是b[0]的地址*a就是b[0]的内容
a+1就是b[1]的地址依此类推
又如char *a = "hank";
那么通过a就能得到整个字符串"hank"
*a是h
*(a+1)是a
...

STRCMP是c语言函数库中的函数
虽然传参传的是指针,但是具体比较的时候比较的是里面的内容。具体涉及到指向数组的指针的应用。因为c中没有String类型,所以就只能使用char类型的指针来表示字符串。

⑻ C语言中的函数指针

函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。

int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
注2:函数括号中的形参可有可无,视情况而定。
下面的程序说明了函数指针调用函数的方法:
例一、
#include<stdio.h>
int max(int x,int y){ return(x>y?x:y); }
void main()
{
int (*ptr)(int, int);
int a,b,c;
ptr=max;
scanf("%d%d",&a,&b);
c=(*ptr)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。

指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。
其定义格式如下所示:
返回类型标识符*返回名称(形式参数表)
{ 函数体}
返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。

其实还是指针,只是指向的内容和声明方法不同而已

⑼ C语言中函数指针用法

函数在内存中有一个物理位置,而这个位置是可以赋给一个指针的。一零点函数的地址就是该函数的入口点。因此,函数指针可被用来调用一个函数。函数的地址是用不带任何括号或参数的函数名来得到的。(这很类似于数组地址的得到方法,即,在只有数组名而无下标是就得到数组地址。)

怎样说明一个函数指针变量呢 ?

为了说明一个变量 fn_pointer 的类型是"返回值为 int 的函数指针", 你可以使用下面的说明语句:

int (*fn_pointer) ();

为了让编译器能正确地解释这句语句, *fn_pointer 必须用括号围起来。若漏了这对括号, 则:

int *fn_pointer ();

的意思完全不同了。fn_pointer 将是一个函数名, 其返回值为 int 类型的指针。

2:函数指针变量

在C语言中规定,一个函数总是占用一段连续的内存区, 而函数名就是该函数所占内存区的首地址。 我们可以把函数的这个首地址 ( 或称入口地址 ) 赋予一个指针变量, 使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为 " 函数指针变量 " 。

函数指针变量定义的一般形式为:

类型说明符 (* 指针变量名 )();

其中 " 类型说明符 " 表示被指函数的返回值的类型。 "(* 指针变量名 )" 表示 "*" 后面的变量是定义的指针变量。 最后的空括号表示指针变量所指的是一个函数。

例如: int (*pf)();

表示 pf 是一个指向函数入口的指针变量,该函数的返回值 ( 函数值 ) 是整型。

下面通过例子来说明用指针形式实现对函数调用的方法。

int max(int a,int b)

{

if(a>b)return a;

else return b;

}

main()

{

int max(int a,int b);

int(*pmax)();

int x,y,z;

pmax=max;

printf("input two numbers:/n");

scanf("%d%d",&x,&y);

z=(*pmax)(x,y);

printf("maxmum=%d",z);

}

从上述程序可以看出用,函数指针变量形式调用函数的步骤如下:

1>. 先定义函数指针变量,如后一程序中第 9 行 int (*pmax)(); 定义 pmax 为函数指针变量。

2>. 把被调函数的入口地址 ( 函数名 ) 赋予该函数指针变量,如程序中第 11 行 pmax=max;

3>. 用函数指针变量形式调用函数,如程序第 14 行 z=(*pmax)(x,y); 调用函数的一般形式为: (* 指针变量名 ) ( 实参表 ) 使用函数指针变量还应注意以下两点:

a. 函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。

b. 函数调用中 "(* 指针变量名 )" 的两边的括号不可少,其中的 * 不应该理解为求值运算,在此处它只是一种表示符号。

3:指针型函数

前面我们介绍过,所谓函数类型是指函数返回值的类型。 在C语言中允许一个函数的返回值是一个指针 ( 即地址 ) ,这种返回指针值的函数称为指针型函数。

定义指针型函数的一般形式为:

类型说明符 * 函数名 ( 形参表 )

{

…… /* 函数体 */

}

其中函数名之前加了 "*" 号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型。

如:

int *ap(int x,int y)

{

…… /* 函数体 */

}

表示 ap 是一个返回指针值的指针型函数, 它返回的指针指向一个整型变量。下例中定义了一个指针型函数 day_name ,它的返回值指向一个字符串。该函数中定义了一个静态指针数组 name 。 name 数组初始化赋值为八个字符串,分别表示各个星期名及出错提示。形参 n 表示与星期名所对应的整数。在主函数中, 把输入的整数 i 作为实参, 在 printf 语句中调用 day_name 函数并把 i 值传送给形参 n 。 day_name 函数中的 return 语句包含一个条件表达式, n 值若大于 7 或小于 1 则把 name[0] 指针返回主函数输出出错提示字符串 "Illegal day" 。否则返回主函数输出对应的星期名。主函数中的第 7 行是个条件语句,其语义是,如输入为负数 (i<0) 则中止程序运行退出程序。 exit 是一个库函数, exit(1) 表示发生错误后退出程序, exit(0) 表示正常退出。

应该特别注意的是函数指针变量和指针型函数这两者在写法和意义上的区别。如 int(*p)() 和 int *p() 是两个完全不同的量。 int(*p)() 是一个变量说明,说明 p 是一个指向函数入口的指针变量,该函数的返回值是整型量, (*p) 的两边的括号不能少。

int *p() 则不是变量说明而是函数说明,说明 p 是一个指针型函数,其返回值是一个指向整型量的指针,*p 两边没有括号。作为函数说明, 在括号内最好写入形式参数,这样便于与变量说明区别。 对于指针型函数定义,int *p() 只是函数头部分,一般还应该有函数体部分。

main()

{

int i;

char *day_name(int n);

printf("input Day No:/n");

scanf("%d",&i);

if(i<0) exit(1);

printf("Day No:%2d-->%s/n",i,day_name(i));

}

char *day_n

ame(int n)

{

static char *name[]={ "Illegal day",

"Monday",

"Tuesday",

"Wednesday",

"Thursday",

"Friday",

"Saturday",

"Sunday"};

return((n<1||n>7) ? name[0] : name[n]);

}

本程序是通过指针函数,输入一个 1 ~ 7 之间的整数, 输出对应的星期名。指针数组的说明与使用一个数组的元素值为指针则是指针数组。指针数组是一组有序的指针的集合。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。

指针数组说明的一般形式为: 类型说明符 * 数组名 [ 数组长度 ]

其中类型说明符为指针值所指向的变量的类型。例如: int *pa[3] 表示 pa 是一个指针数组,它有三个数组元素, 每个元素值都是一个指针,指向整型变量。通常可用一个指针数组来指向一个二维数组。 指针数组中的每个元素被赋予二维数组每一行的首地址,因此也可理解为指向一个一维数组。图 6—6 表示了这种关系。

int a[3][3]={1,2,3,4,5,6,7,8,9};

int *pa[3]={a[0],a[1],a[2]};

int *p=a[0];

main()

{

int i;

for(i=0;i<3;i++)

printf("%d,%d,%d/n",a[i][2-i],*a[i],*(*(a+i)+i));

for(i=0;i<3;i++)

printf("%d,%d,%d/n",*pa[i],p[i],*(p+i));

}

本例程序中, pa 是一个指针数组,三个元素分别指向二维数组 a 的各行。然后用循环语句输出指定的数组元素。其中 *a[i] 表示 i 行 0 列元素值; *(*(a+i)+i) 表示 i 行 i 列的元素值; *pa[i] 表示 i 行 0 列元素值;由于 p 与 a[0] 相同,故 p[i] 表示 0 行 i 列的值; *(p+i) 表示 0 行 i 列的值。读者可仔细领会元素值的各种不同的表示方法。 应该注意指针数组和二维数组指针变量的区别。 这两者虽然都可用来表示二维数组,但是其表示方法和意义是不同的

⑽ c语言 指向返回指针的函数的指针的写法

你的陈述不太全,缺返回的指针指向的类型。写法如下:
char *(*p)(int,int);//声明p是指向一个具有两个int型形参的函数,函数返回一个char *型指针。

阅读全文

与c语言过滤函指针写法相关的资料

热点内容
中速过滤器技术资料 浏览:35
一吨污水加多少铁盐 浏览:601
河北环氧树脂衬里 浏览:105
半透膜渗透压永动机 浏览:396
一级反渗透回收率应该是多少 浏览:78
正定新区地下水厂超滤 浏览:451
污水管道跨越燃气管道如何处理 浏览:882
地热过滤网拆除 浏览:840
mbr废水 浏览:695
植物细胞的细胞膜是否是半透膜 浏览:736
浮雕立体树脂装饰画 浏览:867
净水器制水怎么关闭一直流水 浏览:580
科鲁滋空气滤芯总成怎么安装 浏览:926
安徽湿固化树脂厂家 浏览:478
饮水机管道怎么安装 浏览:496
陶式超滤膜有序列号吗 浏览:852
医院直饮水机漏水怎么办 浏览:240
污水泵加什么油加多少合适 浏览:816
树脂台面制作视频教程 浏览:613
污水中tss什么意思 浏览:88