文档章节

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

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 391
阅读 8
收藏 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]);       
    }
}

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/12/04/1347680.html

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

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

HustWolf
2017/12/04
0
0
WEB前端学习:学会ES6的函数新功能,少写10000行代码

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

web前端小辰
05/31
0
0
从 Hello World 开始

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

浪味仙儿H
2017/05/27
0
0
44 个 Javascript 变态题解析 (上)

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

呵呵闯
2016/07/20
13
0
C语言/C++编程代码训练—昨天练习题进行讲解—真正的小项目

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

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringCloud SpringBoot mybatis分布式Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用...

itcloud
20分钟前
0
0
c++ std::bind和std::function

定义于头文件 <functional> std::bind 函数绑定,https://zh.cppreference.com/w/cpp/utility/functional/bind // bind 用例#include <iostream>#include <functional> // 自定义的一......

SibylY
23分钟前
0
0
SecureCRT的安装与破解(过程很详细!!!)

SecureCRT的安装与破解(过程很详细!!!) SecureCRT的安装与破解(过程很详细!!!) 使用SecureCRT可以方便用户在windows环境下对linux主机进行管理,这里为大家讲一下SecureCRT的破解方...

DemonsI
27分钟前
0
0
介绍几款可用的web应用防火墙

目前有两款,基于软件和基于应用程序的web应用防火墙。基于软件的产品布置在Web服务器上,而基于应用程序的产品放置在Web服务器和互联网接口之间。两种类型的防火墙都会在数据传入和传出web...

上树的熊
34分钟前
1
0
用Visual Studio开发以太坊智能合约

区块链和以太坊 自从我熟悉区块链、以太坊和智能合约以来,一直失眠。 我一直在阅读,阅读和阅读,最后我能够使用一些工具,他们建议使用以太坊网站官方客户端应用程序(Ethereum Wallet)也...

geek12345
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部