c语言 怎么解决调用函数导致的原数组改变

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 怎么解决调用函数导致的原数组改变相关的知识,希望对你有一定的参考价值。

如在函数中使每个数都扩大两倍,但如果引用原数组地址的话会导致原数组也改变,本人目前想到的是使用for循环复制一个数组,有大神有更好的办法吗

可以用string.h中的memcpy,这个函数按照内存复制,速度比for快一点。 参考技术A 指针、数组、指针的指针都可以,但是也要看被调用函数中怎处理的,处理方法不对也不能改变原有值。 参考技术B 你的实参是数组的首地址,首地址当然没有变,你改变的是这个首地址下的数组内容,不是首地址本身
形参的修改不改变实参本身,这句话在C语言里永远适用,因为形参永远只是实参的副本,C语言里没有引用

C语言调用数组返回数组怎么做?

参考技术A

#include <stdio.h>

#define MIN(x,y)

int * add_1();

main()



int * p = add_1();

int b[5];

for(int i=0;i<5;i++)

b[i] = *(p+i);

for(i=0;i<5;i++)

printf("%d",b[i]);



int * add_1()

int static a[5]=1,2,3,4,5;

return a;

扩展资料:

注意事项

一、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。

可以是全局变量,静态局部变量,动态分配内存,以及从函数参数传过来的数组地址。

二、返回指针时,无法返回长度,所以需要其它方式传回数组长度,以下是几种常用的方法。

1、约定固定长度。

2、以函数参数返回数组长度。

3、将长度保存在全局变量中。

4、约定数组结束标记。

5、在数组中存储数组长度,如存在第一个元素中。

有些时候需要子函数将一个数组返回出来,通常是两种方法,一种是靠指针,另一种是结构体。

例如指针:

#include <stdio.h>

char *test(char *tmp)

return tmp;

void main(void)

printf("%s",test("第一个测试例子\\n"));

以上是关于c语言 怎么解决调用函数导致的原数组改变的主要内容,如果未能解决你的问题,请参考以下文章

用c语言解决数组

很急,我用keil写一个C语言子函数,去调用数组,怎么写,例如

c语言局部变量可以被其他的原文件引用吗

c语言 两个函数(传值和传引用)并且比较两者的不同,题目自设

C语言中函数调用怎么返回两个值

C语言调用数组返回数组怎么做?