| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1309 人关注过本帖
标题:c语言,存在数组的情况下,声明函数的时候,int fun1(int array[])为什么可 ...
只看楼主 加入收藏
Gaara_Seven
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-11-24
结帖率:100%
收藏
 问题点数:0 回复次数:3 
c语言,存在数组的情况下,声明函数的时候,int fun1(int array[])为什么可以写成 int fun1[int *array]?
目前还没学到指针,但在讲函数的时候提到了这方面的知识。
我是不太懂老师讲的:指针指向数组第一个元素
而在定义一个函数fun1的时候,int fun1(int *array,int size)  //这里它是怎么知道array是一个数组名字的,下面没有声明这是一个数组就直接:
int fun1(int *array,int size){
int i;
for(i=0;i<size;i++)
array[i]=i;

编译器怎么知道它是一个数组的。。
搜索更多相关主题的帖子: c语言 元素 知识 
2014-12-01 12:20
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:0 
编译器不知道它是一个数组,数组名被编译器当作一个地址,或者说被当作一个指针常量。用法同指针。这也就是为什么C语言不检查数组边界的原因。

你给出的代码里,函数的参数size才是数组元素个数,这个是需要直接给出的(或者用sizeof来求),要不然C编译器是没法自己知道的。

[ 本帖最后由 yahwei 于 2014-12-1 14:01 编辑 ]

[qq]949654600[/qq]
2014-12-01 13:57
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
基本上在c里数组名就可以直接当指针,指针也一样,不用两次定义,你可以试试

一片落叶掉进了回忆的流年。
2014-12-01 14:32
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
在函数头部的int *array是形参,这样定义可以接指针实参,也可以接受数组名当实参。
如果在函数头部用int array[]来定义形参,虽然也能接受指针、数组名当实参,但是不安全,指针运用不当时容易数组越界。

楼主给出的问题,关键是看你传了个什么实参给fun1

传的是数组,编译器就按数组来处理,传的是指针的话,就按指针处理。
由于fun1函数体里用的是数组下标的方法,则函数不会执行,会报错的。

改成下面这样的话,指针、数组名都可处理。

程序代码:
#include <stdio.h>
#include <stdlib.h>

void fun1(int *array, int size);

int main(void)
{
    int *p = malloc(10*sizeof(int));
    int arr[10];
    fun1(p, 5);
    printf("\n");
    fun1(arr,5);
    printf("\n");
    free(p);
    return 0;
}

void fun1(int *array, int size)
{
    int i;
    for(i=0;i<size;i++)
    {
        *(array+i)=i;
        printf("%4d ", *(array+i));
    }
}


从fun1的函数体来看,严格讲fun1的头部还是用int array[]易理解。

Only the Code Tells the Truth             K.I.S.S
2014-12-01 14:34
快速回复:c语言,存在数组的情况下,声明函数的时候,int fun1(int array[])为什 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028960 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved