c语言函数啥时候用指针 C语言函数指针怎么用

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语言——什么时候用指针

1.什么时候都可以用指针,因为用指针的效率比用变量高。

2.当一个函数要返回1个以上的运算结果时,就必须用指针,因为一个函数只能返回一个值,更多的得用指针“带回”。

3.操作数组时,用指针不仅方便得多而且代码时效很高。

4.操作文件时,不用指针寸步难行。

5.利用指针可以简化函数调用的书写过程,使源代码易于阅读。

……不一而论。

c语言什么时候使用数组,什么时候使用指针?

任何时候都可以使用数组,使用指针。

定义时,通常只有字符指针,和字符数组指针直接定义。用来表示字符串或字符串数组。

其他一般定义数组。操作时用指针或数组。

其他指针,多半用在参数传递,数据结构内部(不确定需要内存的大小,或者链表,二叉树等链式结构)的时候。

还有一种是有些函数参数就是指针,这时定义一个指针,来操作传进来的指针参数比较好。

指针作为参数,有一下几种用法,

1)当作数组用,用来获取或设置数组元素。

2)把一个比较长的数据结构传入函数,只需要一个指针就够了。

3)传入变量的地址,用来读取或修改变量的值,主要是为了修改用。

直接定义一个不指向任何对象的指针,并且也从不给他赋值,没什么意义;

指针要么指向数组,要么指向变量,要么动态申请内存。

NULL指针,只是一个方便的指针,表示不指向任何对象。

真正有用的还是指向具体对象的指针。

如果定义了一个指针,使用时要让他指向一个具体对象,当需要他不指向什么对象的时候,给他赋值为NULL;

PS:

C语言,数组名只是一个指针常量而已,离开定义可见处,数组大小的信息就不存在了。

只有定义完全可见的地方,才可以获得数组的大小。

数组作为函数的参数,和外部引用声明都不能获得数组的大小。

参数只能传递指针,参数的大小只是指针的大小;

只能看到声明的地方,获取数组大小的努力,只能换来错误。

void fun1(int a[10]) //== void fun1(int a[]) ==void fun1(int *a)

{

}

void fun2(int [10][10])// ==void fun2(int a[][10])== void fun2(int (*a)[10])

{

}

C语言到底什么时候用指针什么时候用变量

1. 需要改变实参的时候, 只能用指针.

2. 传递大型结构并且"只读"其元素的时候,

因为大型结构通过值传递, 需要拷贝其每个元素, 这样效率太低.

3. 需要遍历数组或频繁引用其元素时, 这样效率比使用下标高.

4. 动态分配空间时, 必须使用指针.

5. 传递数组时, 必须使用指针.

6. 函数返回指针时, 比如fopen

这是经验和技巧的问题, 多写点代码吧:)


文章名称:c语言函数啥时候用指针 C语言函数指针怎么用
文章起源:http://myzitong.com/article/dooscgh.html