c语言函数的参数是指针吗 c语言函数的参数是指针吗还是函数

C语言函数中什么是输出参数?C语言中的输出参数应该是指针吧\x0d\x0aint max(int a, int b,int *m)//a,b是输入参数,m是输出参数\x0d\x0a{\x0d\x0a*m = ab?a:b;\x0d\x0areturn *m;\x0d\x0a}\x0d\x0a\x0d\x0aint main()\x0d\x0a{\x0d\x0aint a=2,b=3,m;\x0d\x0amax(a,b,m);\x0d\x0aprintf("max=%d\n",m);\x0d\x0a}
c语言中 , 函数的形参什么时候必须是指针情况1 需要读入的数据是比较大的数据,使用指针作为参数可以节省堆栈
比如 定义1个结构体
typedef struct test
{
char buffer1[10000];
char buffer2[10000];
//后面还有一大堆成员
}test_ts;
void Func1(test_ts t1)
{
//函数体是对t1成员进行Read处理
}
void Func2(test_ts *t1)
{
//函数体是对t1成员进行Read处理
}
上面2个函数功能其实一样,但函数Func2参数只是一个指针占的空间就4 Byte,
Func1参数是一个结构体 , 占的空间就看成员多少,但例子的使用的堆栈最少20000Byte了 。
情况2 需要对数据进行改写
一般对应的数据是数组或结构体数据 。
比如memset函数函数,用于把传入指针的数据写入对应的数据 。
具体函数体内容不贴了 , baidu查下吧 。
例如还是这个结构体test_ts
test_ts t2;
如果需要将t2的每个成员初始化成0,可以把每个成员挨个赋值成0 。
但如果用下面这样代码
memset(t2,0,sizeof(t2));
一行搞定
在c语言中为什么有的函数参数是指针 有的是没有指针得指针在函数参数中通常用于传递一个结构,一个字符串,或者一个需要修改的变量;因为在32位系统中变量size最大也只能是32位 , 也就是4个字节,一个long , 再大就不能直接传递了 。
c语言中指针作函数的参数是怎么回事???有点不懂?。。?/h2>如果使用指针作为参数就是地址传递 , 否则只是值传递 。你可以看下下面的这个函数:
void modify(int a)
{
a++;
}
void main()
{
int a=5;
modify(a);
printf("%d",a);
}
这个程序的答案还是5 。为什么?
因为当调用modify(a)时,在执行modify函数时,是另外开辟了一个内存空间,将main中a的值复制过来 , modify函数中所有的操作都是相对于这个新开辟的内存空间而言的,对原来的a没有任何改变 。
现在就来说说指针,如果用指针传参的话那就完全不一样了,指针(pointer),说白了即是指向变量内存地址 。同样上面的例子:
void modify(int * a)
{
(*a)++;
}
void main()
{
int a=5;
modify(a);
printf("%d",a);
}
这个答案当然是6
因为你传进去的是a的地址,所以在modify函数中的操作都是对a地址上的内容进行操作,即是操作a所以modify函数不用返回这个数,main中a的值也会改变 。因为大家都是操作同一个内存空间,而上面不用指针,modify操作的是另一个新开辟的内存空间,只是这个内存空间初始值和a一样 。
你在子函数中要对你的主调用函数中变量进行操作时也可以用指针做参数,这样子函数就可以不用return 如果不是用指针的话,就要再子函数的未尾加上一条return x;把这个数返回当返回值 。
C语言函数里的参数是指针的问题函数定义和函数调用是两个概念,函数定义 为f(int *arr),表示参数是一个整型指针,因此使用该函数时要传递一个地址,如变量int a=0; 调用函数f传递a的地址时需要写为f(a);而对于数组来说,如int b[]=[1,2,3], b本身就是数组首元素的地址,因此调用函数f传递数组首地址需要写为f(b) 。
【c语言函数的参数是指针吗 c语言函数的参数是指针吗还是函数】

推荐阅读