在编程时,一簇连续的内存单元,比如数组或者malloc的内存块,如下的数组a 或者指针p.

int a[4];

int *p = malloc(4 * sizeof(int));

我们要想修改上述连续的内存块,可以写一个函数(一维指针做参数传入起始地址即可)来搞定。

If you want to pass a single-dimension array as an argument in a function, you would have to declare a formal parameter in one of following three ways and all three declaration methods produce similar results because each tells the compiler that an integer pointer is going to be received. Similarly, you can pass multi-dimensional arrays as formal parameters.

Way-1

Formal parameters as a pointer −

void myFunction(int *param) {...
}

Way-2

Formal parameters as a sized array −

void myFunction(int param[10]) {...
}

Way-3

Formal parameters as an unsized array −

void myFunction(int param[]) {...
}

1. 一维指针做参数

#include <stdio.h>
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))void arrayDouble(int *p, int size)
{for (int i=0; i<size; i++){*(p+i) = *(p+i) * 2;}
}void arrayDouble1(int p[], int size)
{for (int i=0; i<size; i++){p[i] = p[i] * 2;}
}void arrayDouble2(int p[4], int size)
{for (int i=0; i<size; i++){p[i] = p[i] * 2;}
}int main()
{int arr[] = {1, 2, 3, 4};for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}printf("\n");arrayDouble(arr, ARRAY_SIZE(arr));for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}  printf("\n");arrayDouble1(arr, ARRAY_SIZE(arr));for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}printf("\n");arrayDouble2(arr, ARRAY_SIZE(arr));for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}printf("\n");return 0;
}

上述code运行结果:

1 2 3 4 
2 4 6 8 
4 8 12 16 
8 16 24 32

2. 两维指针做参数

用两维数组做参数也可以一簇连续的内存单元的值,只是没有必要,大材小用,炫技而已,或者对指针操作含糊不清。

#include <stdio.h>
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))void arrayDouble(int **pp, int size)
{int *p = *pp;for (int i=0; i<size; i++){*(p+i) = *(p+i) * 2;}
}/* arrayDouble1 is the same as arrayDouble,just without temp variable */
void arrayDouble1(int **pp, int size)
{for (int i=0; i<size; i++){*(*pp+i) = *(*pp+i) * 2;}
}int main()
{int arr[] = {1, 2, 3, 4};int *p = &arr[0];for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}printf("\n");arrayDouble(&p, ARRAY_SIZE(arr));for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);} printf("\n");arrayDouble1(&p, ARRAY_SIZE(arr));for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}  printf("\n");return 0;
}

运行结果:

1 2 3 4 
2 4 6 8 
4 8 12 16

连续地址数据(数组或者malloc的内存)作为函数参数相关推荐

  1. c语言指针数组分配内存,指针数组数组指针的分配内存及函数参数 C语言版

    最近写代码总是被基础知识卡住,十分耽误时间,今天又卡住了.所以下定决心一定要弄清楚这个问题,然后不好的是网上的资料总是解决的并不清楚,总是在纠结什么是指针数组什么是数组指针,看了<C缺陷和陷阱& ...

  2. c语言使用指针改数组逆置,用指针作函数参数,编写函数,将一个整型数组中的元素全部逆置。...

    满意答案 singoboss 2013.06.16 采纳率:57%    等级:11 已帮助:3587人 先输入,然后逆序存放,再输出.#include"stdio.h"#defi ...

  3. c语言mac地址字符串转换成数组,CString类型的MAC地址转换为数组类型

    在最近完成计算机网络课程设计的过程中,您需要将mac地址转换为六个字节. 我在互联网上找到了信息. 基本思想是将mac地址分为六个部分,每个部分为十六个. 基数将转换为十进制数,并分配给六字节数组的每 ...

  4. 字符串复制函数strncpy()和内存拷贝函数memcpy()

    #include<string.h> char *strncpy(char *dest, const char *src, unsigned long n); 功能是将指针变量src所指向 ...

  5. C语言通过函数参数不能带出动态内存的例子。

    实验结论:通过函数参数不能带出动态内存,函数参数虽然为指针,其实是在函数内部的临时变量,只是该指针的初始值是通过调用函数赋值的.C语言函数参数都是传值的. #include <stdio.h&g ...

  6. 【嵌入式开发】C语言 内存分配 地址 指针 数组 参数 实例解析

    . Android源码看的鸭梨大啊, 补一下C语言基础 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/detai ...

  7. C语言 内存分配 地址 指针 数组 参数 解析

    指针简介 : 指针式保存变量地址的变量; -- 增加阅读难度 : 指针 和 goto 语句会增加程序的理解难度, 容易出现错误; -- ANSI C : American National Stand ...

  8. 【Proteus仿真】在AT24C04的连续地址中写入数据并循环读取

    [Proteus仿真]在AT24C04的连续地址中写入数据并循环读取 Proteus仿真 实验说明 在AT24C04的地址0-9中分别写入数据,然后在while循环里面循环从AT24C04的地址0-9 ...

  9. C语言动态数组(malloc()函数动态分配内存)

    malloc()函数简介 头文件:<stdlib.h> 或者 <malloc.h>. 函数声明: void *malloc( int size ); 用法: (分配类型 * ) ...

最新文章

  1. 编程入门书籍-Python基础教程(第3版)
  2. onethink的熟悉
  3. 对原生AJAX和HTTP的理解
  4. python第四十一天---作业:简单FTP
  5. io.js 3.0发布:重写Buffer,支持PPC
  6. javascript 懒加载技术(lazyload)简单实现
  7. InnoDB自增原理都搞不清楚,还怎么CRUD?
  8. 【Joomla】Gallery 中的图片失去了 Popup 效果
  9. Sudo环境变量继承
  10. ZOJ3332 Strange Country II java
  11. 台式机计算机怎么分割,台式机如何设置分屏
  12. 怎么搜索百度网盘的资源
  13. MT6762 datasheet,MT6762规格书,MT6762芯片参数资料
  14. 未来的不确定性到底是好是坏
  15. Java中IO流体系
  16. MacBook 如何在合上盖子后还能继续用外接键盘和显示器工作?
  17. Java大作业-商品管理系统
  18. PAT | 1080 MOOC期终成绩 (25分)【附柳神代码】
  19. python获取图片名称_python提取图像的名字*.jpg到txt文本的方法
  20. Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析

热门文章

  1. bitset类型, 标准库类型
  2. solr 3.5 配置及服务器设置
  3. php日期选择插件,优雅的日期选择插件daterangepicker
  4. android手机装windows,安卓手机上运行WindowsXP系统图文教程
  5. 删除第一个_可能是圆谷最后悔的决定!他本应是中国第一个奥特曼,惨遭删除...
  6. redissession有容量上限吗_空气炸锅值得买吗?
  7. linux ls 命令 路径,使用ls命令在Linux中使用完整路径列出文件
  8. 服务器登录中心,为数据中心配置登陆服务器来进行远程访问
  9. php一个数组赋值给对象,php数组与对象相互转换方法
  10. arm shell 获取本地键盘输入值_linux下获取按键响应事件【转】