1. C语言中,指针函数和函数指针有什么区别
在C语言中指针函数和函数指针是两个不同的概念,不能混淆。
指针函数本质上是函数,是一个返回类型为指针的函数,如:
int* max(int *array,int n)
{
//找最大值的地址
return 最大值的地址;
}
max就是一个指针函数。
而函数指针本质上是指针,是指向函数的指针,如:
int (*funp)(int a,int b);
funp就是一个函数指针,可以用它指向一个返回类型为int、有两个int类型的参数的函数。
2. C语言的函数,变量,指针这些术语到底有什么作用,举例说明吧,越简单易懂越多文字解答越好
看你的需要了,有时不用指针作为参数达不到你要的效果,比如一个swap()函数。
int swap(int a,int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
如果你想调用该函数交换两个变量的值,在主函数中输出,那是不可能的。比如这样调用:
int x=1,y=2;
swap(x,y);
printf("%d %d",x,y);
你认为会输出2 1吗?错!还是会输出1 2的。因为传入swap()函数的只是x,y的拷贝,而不是它们自身。
如果要真正达到交换的目的,就要用指针传值。这样定义函数:
void swap(int *a,int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
但是给函数传值时要注意,指针是指向地址的,所以参数要是地址,即需要给变量取地址。
int x=1,y=2;
swap(&x,&y);
printf("%d %d",x,y);
这样就是输出2 1了
3. 关于C语言指针和函数的问题(追加分)
这么给你解释吧,指针就相当是一个门牌号。第一个呢,是因为f()函数的参数是指针,就是“门牌号”,所以他们交换的时候是把门牌号进行了交换。所以当你第二次进行访问的时候,原来A房间变成了B房间,所以当你想要让A房间里的人出来的时候,这个时候原来住在里面的B君就出来了。所以发生了交换。
第二个呢,传的是形参,形参就是把A君复制一个(我们理解为克隆一个A君),然后克隆一个B君,最后把克隆人交换。然后我们输出的时候,我们却要A房间里的人,那个时候,A君还在自己的房间,当然他们出来的时候,就是没有交换了。如果,要交换,我们可以输出克隆人。那么看到的结果就是已经发生了交换。
我把第二个代码,给你稍微改下,就是输出克隆人,那么你就会看到,我们原来交换的只是克隆人了。
============
第二个
#include<stdio.h>
void main()
{void f(int x,int y);
int a,b;
scanf("%d,%d",&a,&b);
f(a,b);
}
void f(int x,int y)
{int p;
p=x;
x=y;
y=p;
printf("%d,%d",x,y);
}
输入5,9
输出9,5
===========
有不明白的继续追问!
4. C语言中一个关于指针与函数的问题
这个原因很简单.
因你的程序是单线程/单任务
且在你p=f1();后,没有执行过其它任何程序
p指向的内存的值没有被改变,所以结果是正确的
若你再定义一个函数,如
int
ttt()
{
int
x[10],i;
for(i=0;i<10;i++)
x[i]=i;
}
而你在
p=f1();
后面执行一下这个函数
...
p=f1();
ttt();
printf("%d\n",*p);
....
你看下结果
若程序是多线程多任务的
那情况就更复杂,你最终的*p值就不得而知了
所以C指针是有完全性问题的,程序的某些BUG就是这样产生的
5. C语言中关于指针变量与函数的用法。
#include<stdio.h>
1.申明数组
a[5],下标是应该从0~4的;
2.进行排序时需要用2个变量进行冒泡排序;
3.scanf时%d后面不需要空格。
程序修改如下:
void
pa(int
*a,int
n)
{
int
i,j;
int
t;
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(*(a+j)>*(a+j+1))
{
t=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)
=
t;
}
}
void
main()
{
int
a[5],i;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("未排序前的数列为:\n");
for(i=0;i<5;i++)
printf("%d
",a[i]);
pa(a,5);
printf("排序后的数列为:\n");
for(i=0;i<5;i++)
printf("%d
",a[i]);
}
6. C语言中的函数指针和指针函数怎么理解
简言之,函数指针就是指向函数(函数入口地址)的指针,指针函数就是返回数据类型为指针的函数
函数指针:void (*fun)(); 指针函数:type *fun();其中type为数据类型,比如char,int等等