c语言中函数形参为指针 c语言函数调用指针参数
c语言函数的形参为指针变量时,对应的实参可以是数组名。怎么理解呀
举例:
成都创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的独山网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
void f(int *p)
{
}
int arr[]={1,2,3};
因为函数f的形参是一个类型为int的指针变量,所以调用f时,可以将数组名arr作为实参传给形参p。即可以这样调用:f(arr);
C语言形参指针
1 这两种形式没有任何区别,定义的都是char* 类型的指针,不过有的书上建议采用*和变量相靠近的写法,这样可以避免连续声明时的错误,例如:char *ptr,a;可以明显知道一个是指针的变量一个是char类型的变量。
2 二维数组实际可以声明成指向指针的指针。这样在接受形参的时候,就可以用一个双重指针来接受。
void f(int **a) //怎么写?
{
}
int a[100][100];
f(a);
3 返回值是一个指针就可以实现了,不过返回的地址一定要是在堆空间申请的空间,或者是在静态区的空间。不要返回在函数栈中的地址,以防止在退出函数时,栈空间释放,成为幽灵内存。
char* fun(){
char* ptr ="abc";
return ptr;
}
C语言函数里的参数是指针的问题
函数定义和函数调用是两个概念,函数定义 为f(int *arr),表示参数是一个整型指针,因此使用该函数时要传递一个地址,如变量int a=0; 调用函数f传递a的地址时需要写为f(a);而对于数组来说,如int b[]=[1,2,3], b本身就是数组首元素的地址,因此调用函数f传递数组首地址需要写为f(b)。
C语言问题 函数中形参若为指针,则调用时对应位置上的实参不能是()
不能是
简单变量,因为
它不是地址。
语法规则而已。
形参若为指针,实参必须是
指针变量,或
数组名,或
简单变量的地址。
数组名
就是数组的首地址,是地址
简单变量的地址
是地址
形参若为指针,实参是
指针变量,这是一一对应,天经地义。
C语言中,函数形参为指针,调用时的实参为立即数,应该怎么转化类型?
立即数不能转换成指针,因为它不在内存中。(int*)2表示从地址0x02开始的int型的地址空间。如果你的函数形参是指针而实参却需要传递立即数,说明这个函数编的是有问题的。
如果你一定要传递,可以用一个中间变量存放立即数,然后传递该变量的地址。
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语言中函数形参为指针 c语言函数调用指针参数
转载来于:http://scyanting.com/article/hejcdj.html