导航:首页 > 解决方法 > c语言函数指针问题解决方法

c语言函数指针问题解决方法

发布时间:2022-05-06 06:36:35

⑴ C语言的指向函数的指针的问题

函数指针就是一个函数的首地址,这个在汇编里面最好看明白了.
比如:int * a (int i, int j) ; 假设a的值是:0x3312FF80,,下面是汇编调用的例子.
push j
push i
call 0x33FF80
上面是调用方法,而int* a(int i, int j); 的返回值也很容易看出来,返回一个DWORD类型的一个指针而已.反汇编应该是 return n;这里的n是四个字节,应为返回是一个指针类型,在32位下指针就是4字节.

我有仔细研究了下你的问题,你是弄不明白 int* a() 和int (*p)() 吗?还是别的什么意思?请继续追问.
是否可以解决您的问题?

⑵ C语言函数及指针问题.

这个理解起来其实很简单
只要记住一点,实参和形参不在一个内存地址中就可以,改变形参不会改变实参的
但是有一个例外,就是在声明子函数是,参数带&,这表示实参形参公用一个内存地址

在调用x1函数时,i j会另外申请内存地址,那么交换了ij,但是ab所在的内存地址的内容是不会改变的

调用x2时,传递过去的是ab的内存地址,并且在子函数中,交换了ab内存地址中的内容,那么ab就交换了
这个主意两点
1,交换了ab内存地址(也就是指针)中的内容,但是你看在子函数中,指针是没有交换的,所以说传递过去的参数是没有改变,只是改变了指向的地址中的内容
2,要是在子函数中声明的c是指针,如果用c=i;i=j;j=c,那么只是交换了指针,而指针指向的内容还是没有改变,并且在主函数中,这两个参数指针还是没有改变。道理同第一个,因为实参和形参是占不同的内存地址,

⑶ 关于C语言中指针函数的问题

不行, 原因是found函数已经声明成返回一个int指针的函数了,如果不声明p为指针则在p=founc(a,n)时会因为类型不匹配而报错。两种方法可以解决:1,直接省略掉变量p,在printf语句中直接用printf("%d", *found(a,n));来输出结果;2,修改found函数为:<pre t="code" l="cpp">int found(int b[10], int n)
{
return b[n-1];
}则p可以直接声明为int, 且赋值时用p=found(a,n); 输出时用printf("%d", p);可以看到这样改动的比较多。

⑷ c语言指针函数问题,求解题过程!谢谢!

a是全局变量,所以每调用一次函数这个值就被+1。

s[d] = s[a] 就是赋值语句,相当于改变主函数中的t数组。
总共调用了4次fun函数。
1。s[4] = s[0],此时t数组为{1,3,5,7,1}
2。s[3] = s[1] ,此时t数组为{1,3,5,3,1}
后面的你类似再推导就行了,最后的输出是:13531。

不过这个程序也有点问题,就是k并没有定义。

⑸ C语言函数指针问题

第一是:函数指针的使用 ,可以不用*号,也能正确使用
第二是:取出指针P对应的内容,加一后 使用

⑹ c语言,函数里的指针问题

这个其实很好理解
只需要把%s,%c,%p放在一起看
首先%s是最常见的很好理解,就是告诉程序后面的变量是一个字符串,在C语言中也就是字符数组,类型是char*或者char[],换句话说,你告诉程序我会给你一个指针,你去读这个指针指向的值。
然后%c是告诉程序后面的变量是个字符,类型是char,差别已经很明显了,这时候你告诉程序我给你提供一个字符,你给我在%c处打印出来。然而你给的却是一个指针,那程序就直接把你给的指针指向的地址本身当成字符打印出来了。但是一个地址肯定不止一个字节,也就是说超过了char应该有的大小,这时候程序会直接忽略了超出大小的部分,只读第一个字节。
如果你同时使用%p,告诉程序,你会提供一个指针,直接把这个指针指向的地址给我打印出来。把输出的地址最后两位的16进制数查ascii表,换算成字符,你会发现,刚好就是前面%c打印出的字符。

⑺ 关于C语言函数指针的问题

首先,编译器对于很多操作都有隐式转换.

其次,函数指针指向的是编译后的函数代码(机器指令)的首地址.

因此你用星号操作指针难道要访问指令吗?函数唯一的访问方式就是调用,因此编译器做了默认处理,无论有没有星号都是调用函数,这种由编译器自动决定操作叫隐式转换.(其他编译器有可能会报错)

PS:尽量不要利用隐式转换而偷懒,因为依赖编译器的自动功能会存在安全隐患,因为不同的编译器隐式转换有所不同,代码还是明确点比较安全.因为即便更新编译器版本你的程序也不会出问题.

⑻ 关于c语言函数指针的问题

1.fun是一个函数指针,即fun还不是一个函数,只是一个可以指向函数的指针,利用这个指针可以调用函数,这个函数的返回值为空,带有一个int型参数.例如:
void f(int x)
{
printf("%d",x);
}
void main()
{
void(*fun)(int);
fun=f; //fun指向函数f
fun(10);//通过fun调用函数f
}
2.void *fun(int),这个fun是一个指针函数,即函数返回值不是函数值本身,而是函数值的地址,也就是说,fun是函数值为指针的函数;但这个定义没有意义,因为函数类型为void,即不必使用函数值

⑼ C语言指向函数指针问题

#include
<stdio.h>
void
main()
{
int
max(int
,int
);
int
(*p)(int
,int);
p=max;
//此处利用
p=max是正确的指向函数的指针的用法,p指向max的入口地址
//此处用*p=max得到相同结论,为什么呢?因为你这样赋值之后*p的内容就是max
//所以在执行(*p)(q,w)它时其实是执行的(max)(q,w),如果是p=max此时执行(*p)(q,w)是等价于执行max(q,w)。
int
q,w;
printf("please
input
the
two
numbers:\n");
scanf("%d%d",&q,&w);
printf("the
larger
number
is:%d",(*p)(q,w));
}
////////////////////////////////////
int
max(int
a,int
b)
{
if(a>b)
return
a;
else
return
b;
}

⑽ 关于C语言指针函数的问题

char*connect(char*dst,char*src)
{
char*q,*p;
for(p=dst;*p;p++);//将p指针移动到dst数组的结束符0的位置
for(q=src;*q;q++,p++)//dst从结束符开始,src从首地址开始,一一对应传值
*p=*q;
*p=0;
returndst;
}

阅读全文

与c语言函数指针问题解决方法相关的资料

热点内容
宝宝感冒炒生姜的食用方法 浏览:373
停课不停学历史学科有什么方法 浏览:6
防溢乳垫使用方法 浏览:742
暖巢囊肿保守治疗方法 浏览:424
不用水咸鸭蛋腌制方法最快又简单 浏览:858
腰肌经络锻炼方法 浏览:672
电动洗脚盆使用方法 浏览:646
全站仪引点计算方法 浏览:172
咳嗽呕吐怎么办方法 浏览:957
酒店冷藏柜不制冷解决方法 浏览:574
怕体检测血压有什么方法 浏览:574
碧海金沙帐篷使用方法 浏览:463
2个大拇指好麻木用什么方法治疗 浏览:355
站立检测骨盆前倾的方法 浏览:404
最简单双螺纹起针方法 浏览:252
种玉米的方法视频 浏览:12
双层楼梯尺寸计算方法 浏览:326
类风湿性关节炎的症状及治疗方法 浏览:490
vivo手机打电话黑屏在哪里设置方法 浏览:300
分析设备设施的风险方法是 浏览:548