c语言函数传递指针
① c语言指针传递问题
指针传递、引用传递指的就是调用函数时传递的是指针、引用。 与之对应的还有传值方式。这种方式只是传递了变量的一个副本。也就是说只传了一个值而已,并不是这个变量,所以就无法对这个变量更改了。而传递指针或者引用就不一样了。传递的是一个变量地址,那么你更改这个地址对应的内容也就是修改这个变量了。
所以在数组排序子函数中进行的排序操作就会直接作用到你的主函数中的数组了。这样,当返回主函数后,你定义的数组内容已经发生了变化。这就是指针传递的价值了。
lyqf365|说的“ 用引用来传数组好传不太靠谱。。。。。”, 好像我也没见过引用传递数组的。 你自己可以探索一下。还有,如果定义引用的话,别忘了同时要对其进行初始化,这是和指针的不同点。
② C语言的函数指针传递问题
BSTree T 作为函数参数传递给InsertBST,只是它的拷贝
所以函数执行结束,T本身所指向的内容是不会改变的
所以这时需要传引用,或者两级指针(C语言没有引用)
③ c语言传递函数指针
intcmp是和GetKeyFunc_t对应起来的。
而你现在错在了CmpFunc_t这个函数参数上了。
你把怎样的函数参数指针传给了BST_t *newBST?
你没交代清楚啊,你把错误指针传给newBST函数的第一个参数,编译器肯定报错了。你给了那么多代码,关键你把什么传给了BST_t *newBST的第一个参数?给一下你调用这个newBST函数的代码,而且要你传给该函数第一个参数的参数定义。
另外给个建议:定义函数时,记得对传进来的参数进行合法性检验。多加几行代码是很有必要的,能增强函数的健壮性。(微软也好,ISO也好,都对大部分函数设计时要求做必要的合法检验)
④ C语言指针传递问题
变量FunP是什么类型的呢?MyFun()函数的函数原型是怎样的呢?FunP是函数指针变量吧。
你问题都没描述清楚,怎么帮你解释啊?用程序来验证说明,如下:
#include<stdio.h>
voidMyFun()
{
printf("Thisismyfunction! ");
}
intmain()
{
void(*FunP)();//声明函数指针变量
FunP=MyFun;
printf("MyFun=0x%p ",MyFun);//%p是打印出地址值,16进制输出,下同
printf("FunP=0x%p ",FunP);
FunP=&MyFun;
printf("&MyFun=0x%p ",&MyFun);
printf("FunP=0x%p ",FunP);
return0;
}
//运行结果如下:
MyFun=0x00401350
FunP=0x00401350
&MyFun=0x00401350
FunP=0x00401350
//从运行结果来看,MyFun和&MyFun的值是一样的,所以两个赋值都是将MyFun函数的地址赋给FunP变量。
⑤ 在C语言中,函数传参时怎样利用指针传递数组
比如函数需要一个整型数组:
void ex(int a[])
{
}
或者可以写成:
void ex(int *a)
{
}
效果是一样的。
使用的时候:
引用数组中的第2个元素(即下标为1的元素)
a[1]
或者*(a+1)
基本上与数组的正常使用没有区别。
⑥ 关于C语言函数参数中指针传递的疑问
OS_EVENT应该是一个结构体的名字把 OS_EVENT*pevent表示L是指向OS_EVENT类型的结构体的指针 这个时候用OS_EVENT->(属性)
OS_EVENT L表示L就是一个OS_EVENT类型的结构体 这个时候用OS_EVENT.num
⑦ c语言 函数参数传递 与指针问题
这是个函数指针 前面的void为返回值类型 后面的void*为参数类型.
函数指针是可以作为某个函数的参数的.
(1) 指向函数的指针变量的一般定义形式为:
数据类型 (*指针变量名)(函数参数列表)
函数名是可以缺省的 作为参数传递的时候会去调和 void*(*)(void*)这个类型相匹配的函数的
作为参数调用这个函数的时候 返回类型是void* 就相当于传了一个参数类型为void*,当然这个函数指针的参数也是void*的
⑧ C语言 关于函数形参传递指针类型
按你的意思,应该是
AllPtr[0][0] = 'A';
AllPtr[0][0] = 'B';
AllPtr[0][0] = 'C';
⑨ C语言指针在函数中的传递问题
*x++;
是指针加1,不是值加1
~
~
~
⑩ 关于C语言函数传递指针参数,帮我看看我的程序
你的地址值传递错误,按照我给你修改的试试看,一定要注意你的实参传递的是地址还是具体的值,如果是地址,在子函数中就不要去修改你传递进来的地址。
int
main(void)
{
int
data=0;
//此处随机分配内存空间,不要用指针
myStack=makeStack(myStack,top);
Push(myStack,3);
Push(myStack,8);
Push(myStack,19);
Push(myStack,31);
Push(myStack,43);
Push(myStack,36);
Pop(myStack,&data);//此处,传递的是地址值
printf("%d
",data);
}
int*
Pop(LinkedStack
myStack,int
*data)
{
pStack
cursor=myStack;
if(Stack_Empty())
{
}
else
{
while(cursor->next!=top)
{
cursor=cursor->next;
}
*data=top->data;
//此处,只是在同一个内存空间修改其值,所以不要取地址
top=cursor;
return
data;
}
}