c语言的传值与传指针的问题
其实简单来说, 如果CreateData()和Print()这二个函数是正确的, 你只要分别看一下CreateData()和Print()的函数原型:
十多年的珠海网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整珠海建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“珠海网站设计”,“珠海网站推广”以来,每个客户项目都认真落实执行。
1. int CreateData(Lcountry *head): 它的输入参数类型是 Lcountry *, 也就是Country **, 而 "head"是Country *型, 所以传给CreateData时, 应该取 head, 也即为 Country **型.
2. void Print(Country* p): 它的输入参数类型就是Country *, 而 "head"正是Country *型, 所以只要给它传 "head"就可以.
3. "head"和"head"都是指针, 都是地址, "head"是"*head"的地址, 而"head"是"head"的地址.
关于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;
}
}
请问在C语言中,如果我在一个函数里申请一个指针,怎么能让他传进去的数值。从函数里传出来呢。
如果你只需要传出一个值,把这个值放在return后面,
例如 子函数fun中return p;然后调用时用 t=fun()就可以了。
如果需要传回多个值,需要二级指针。
比如fun(int** p){p=0;}
Main()
{ int *q;
fun(q);
}
调用有q的值就变成0了。
当然由于你说的是将指针传出,所以p需要是二级指针,如果是一般变量的话,p只需要是一级指针就可以了。
C语言 使用子函数的函数参数传回指针的方法
不知下列代码对你是否有用
记住:C中只有_值_传递!
#include conio.h
#include stdio.h
void fun(int **pp, int *i);
int main(void)
{
int *p, i;
i = 88;
fun(p, i);
printf("%d\n", *p);
getch();
return 0;
}
void fun(int **pp, int *i)
{
*pp = i;
}
或者
#include conio.h
#include stdio.h
#include stdlib.h
#define N 100
void getmemory(int **pp, int n);
int main(void)
{
int *p, i;
getmemory(p, N);
for (i = 0; i N; i++)
p[i] = i;
for (i = 0; i N; i++)
(i+1)%10 ? printf("%3d", p[i]) : printf("%3d\n", p[i]); /*输出0~99*/
getch();
return 0;
}
void getmemory(int **pp, int n)
{
*pp = (int *)malloc(n * sizeof(int));
}
C语言指针与函数传递问题,急急急!
所谓对应其实是参数形式上的对应。上面的两个函数都要求传递一个指针类型。并且还是双指针类型。c的编译器执行的是字面上的语义检查,并不实际追究这个参数真是子函数需要的。而你传递参数的正确与否在运行时才能反映出来。尤其是指针,传递一个错误的指针基本会导致你的程序运行不成功,或者直接终止运行。
上面你的代码中你给你的子函数传递一个int 类型的值,编译器肯定会报错,但是你用显式类型转换将int转换成双指针类型就骗过了编译器。比如这样:
int test=0x00400000;
shell_sort((char**)test,n);
编译通过,运行必然出错。
c语言传递函数指针
intcmp是和GetKeyFunc_t对应起来的。
而你现在错在了CmpFunc_t这个函数参数上了。
你把怎样的函数参数指针传给了BST_t *newBST?
你没交代清楚啊,你把错误指针传给newBST函数的第一个参数,编译器肯定报错了。你给了那么多代码,关键你把什么传给了BST_t *newBST的第一个参数?给一下你调用这个newBST函数的代码,而且要你传给该函数第一个参数的参数定义。
另外给个建议:定义函数时,记得对传进来的参数进行合法性检验。多加几行代码是很有必要的,能增强函数的健壮性。(微软也好,ISO也好,都对大部分函数设计时要求做必要的合法检验)
新闻名称:c语言子函数传指针出来 C语言函数传指针
网站网址:http://lswzjz.com/article/hgejjp.html