文档章节

学点 C 语言(36): 函数 - 数组参数

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 391
阅读 8
收藏 0
点赞 0
评论 0

数组参数属于指针参数.

指针参数即时传址参数(或叫引用参数), 如果想在函数中修改参数的值, 这是唯一的途径.

如果把数组当作参数, 不管你愿意与否, 它就是指针, 指向第一个值的指针.

1. 数组参数就是指向第一个元素的指针:
#include <stdio.h>

void getArr(int p[], int si);

int main(void)
{
    int ns[] = {1,2,3,4,5};

    getArr(ns, sizeof(ns)/sizeof(ns[0]));
    
    getchar();
    return 0;
}

void getArr(int p[], int si) {
    int i;
    for (i = 0; i < si; i++) {
        printf("%d\n", p[i]);    
    }
}

 
 
 
 
 

 

 

  

2. 干脆直接声明为指针:
#include <stdio.h>

void getArr(int *p, int si);

int main(void)
{
    int ns[] = {1,2,3,4,5};

    getArr(ns, sizeof(ns)/sizeof(ns[0]));
    
    getchar();
    return 0;
}

void getArr(int *p, int si) {
    int i;
    for (i = 0; i < si; i++) {
        printf("%d\n", p[i]);    
    }
}

 
 
 
 
 

 

 

  

3. 即使你在形参中指定维数也不起作用:
#include <stdio.h>

void getArr(int p[2], int si);

int main(void)
{
    int ns[] = {1,2,3,4,5};

    getArr(ns, sizeof(ns)/sizeof(ns[0]));
    
    getchar();
    return 0;
}

void getArr(int p[2], int si) {
    int i;
    for (i = 0; i < si; i++) {
        printf("%d\n", p[i]);    
    }
}

 
 
 
 
 

 

 

  

4. 既然是指针, 其值就有被修改的可能:
#include <stdio.h>

void getArr(int p[], int si);

int main(void)
{
    int ns[] = {1,2,3,4,5};
    size_t i;
    
    getArr(ns, sizeof(ns)/sizeof(ns[0]));
    
    for (i = 0; i < sizeof(ns)/sizeof(ns[0]); i++) {
        printf("%d\n", *(ns+i));    
    }
    
    getchar();
    return 0;
}

void getArr(int p[], int si) {
    int i;
    for (i = 0; i < si; i++) {
        p[i]++;    
    }
}

 
 
 
 
 

 

 

  

5. 如果是字符数组, 它自己能判断数组尾界:
#include <stdio.h>

void getArr(char p[]);

int main(void)
{
    char ns[] = "ABCDEFG";
    
    getArr(ns);
    
    getchar();
    return 0;
}

void getArr(char p[]) {
    int i;
    for (i = 0; p[i]; i++) {
        printf("%c: %d\n", p[i], p[i]);       
    }
}

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
【计算机本科补全计划】Java学习笔记(八) Java数组

正文之前 CCF考完了。抓紧把Java看完吧,昨晚狠下心来跟老师说要去实验室干活,鬼知道自在日子啥时候就没了。所以还是有点危机感,先把Java学好。另外这几天看图论觉得好有意思,等学完Java就...

HustWolf ⋅ 2017/12/04 ⋅ 0

WEB前端学习:学会ES6的函数新功能,少写10000行代码

Web前端开发工程师是一个很新的职业,是从事Web前端开发工作的工程师。主要进行网站开发,优化,完善的工作。网页制作是Web 1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行...

web前端小辰 ⋅ 05/31 ⋅ 0

从 Hello World 开始

学一门编程语言的开始往往是一个最简单的 Hello World 程序,我们的 Kotlin 学习也不例外: fun main(args: Array) { println("Hello World")} 我们来分析一下有意义的两行代码: fun main(a...

浪味仙儿H ⋅ 2017/05/27 ⋅ 0

Objective-C语法快速参考(收藏)

大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到Interface Builder之后,第一感想是跃跃欲试,而看到Objective-C的语法,第一感想就变成就望而却步了。好吧,我是...

慎道 ⋅ 2011/07/14 ⋅ 0

C语言/C++编程代码训练—昨天练习题进行讲解—真正的小项目

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 03/25 ⋅ 0

不拘一格的perl

决定学perl 完全是因为有人说:要成为黑客最好应该学会c, java,python,perl ,lisp这五门语言,因为它们代表着一些截然不同的设计哲学;而我还没接触过perl。所以我拿起了小骆驼书(像我这样...

leo-H ⋅ 2015/01/21 ⋅ 0

44 个 Javascript 变态题解析 (上)

原题来自: javascript-puzzlers(http://javascript-puzzlers.herokuapp.com/) 读者可以先去做一下感受感受. 当初笔者的成绩是 21/44… 当初笔者做这套题的时候不仅怀疑智商, 连人生都开始怀...

呵呵闯 ⋅ 2016/07/20 ⋅ 0

Objective-C语法快速参考

大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到Interface Builder之后,第一感想是跃跃欲试,而看到Objective-C的语法,第一感想就变成就望而却步了。好吧, 大部...

晨曦之光 ⋅ 2012/05/28 ⋅ 0

Object-C 入门

大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到 Interface Builder之后,第一感想是跃跃欲试,而看到Objective-C的语法,第一感想就变成就望而却步了。好吧,我是...

长平狐 ⋅ 2012/10/09 ⋅ 0

项目中使用过的lodash方法总结

_.findWhere 对集合中的每个元素和源进行深度比较。 该方法支持比较数组、布尔值、数字、日期对象,对象的对象,正则表达式、字符串。 Ex: var users = [ { 'user': 'barney', 'age': 36, '...

罗兹威尔 ⋅ 2017/07/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ARMS: 原来实时计算可以这么简单!

摘要: 业务实时监控服务( ARMS)是一款阿里云应用性能管理(APM)类监控产品。借助本产品,您可以基于前端、应用、业务自定义等服务,迅速便捷地为企业构建秒级响应的业务监控能力。 业务实...

阿里云云栖社区 ⋅ 4分钟前 ⋅ 0

Monkey入门_琉璃

先下载android sdk安装配置好路径,然后adb shell 如果给你显示这个,说明目前没有有效的移动设备链接,可以开个安卓模拟器或者使用真机,usb或wifi链接到电脑都可以,打开usb调试模式;然后...

EvanDev ⋅ 6分钟前 ⋅ 0

Idea类注释模板

一、设置类注释模板 1.选择File–>Settings–>Editor–>File and Code Templates–>Includes–>File Header. 2.设置完成后,创建类时自动生成注释,效果如下。...

Clarence_D ⋅ 7分钟前 ⋅ 0

vuejs题

1、active-class是哪个组件的属性?嵌套路由怎么定义? 答:vue-router模块的router-link组件。 2、怎么定义vue-router的动态路由?怎么获取传过来的动态参数? 答:在router目录下的index.j...

自由小鸟 ⋅ 7分钟前 ⋅ 0

2018年社交系统ThinkSNS年中大促

致各大商企事业单位及粉丝用户: 为感谢大家对ThinkSNS品牌的关注与支持,2018年6月18日官方诚推出:年中大促,限时抢购活动! “ThinkSNS 年中大促,¥6.18超值特惠 名额有限,预购从速! ...

ThinkSNS账号 ⋅ 13分钟前 ⋅ 0

MYSQL主从复制搭建及切换操作(GTID与传统)

如下: MYSQL主从复制方式有默认的复制方式异步复制,5.5版本之后半同步复制,5.6版本之后新增GTID复制,包括5.7版本的多源复制。 MYSQL版本:5.7.20 操作系统版本:linux 6.7 64bit 1、异步...

rootliu ⋅ 13分钟前 ⋅ 0

Java强软弱虚引用Reference

Java强软弱虚引用Reference 本文目的:深入理解Reference 本文定位:学习笔记 学习过程记录,加深理解,提升文字组合表达能力。也希望能给学习Reference的同学一些灵感 源码说明 源码基于jdk...

lichuangnk ⋅ 16分钟前 ⋅ 0

plsql 表中字段及注释时为乱码

在windows中创 建一个名为“NLS_LANG”的系统环境变量,设置其值为“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”, 然后重新启动 pl/sql developer,这样检索出来的中文内容就不会是乱码了。如...

江戸川 ⋅ 19分钟前 ⋅ 0

Docker创建JIRA 7.2.7中文破解版

1、介绍 1.1、什么是JIRA?   关于JIRA网上的介绍有很多,以下摘自百度百科:   JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任...

谢思华 ⋅ 23分钟前 ⋅ 0

Java Class 类使用

Java Class 类使用 我们可以通过已知的包名来获取到 Class 对象,从而可以通过反射动态的来操作对象。 获取Class有三种方式 //通过对象.class直接获取Class integerClass = Integer.class;...

gaob2001 ⋅ 27分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部