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