美文网首页
2019-05-10(函数传参 使用指针 和不使用指针格式)

2019-05-10(函数传参 使用指针 和不使用指针格式)

作者: 常人 | 来源:发表于2019-05-10 09:30 被阅读0次

    参考: c primer plus p290

    以数组求和为例:

    待处理名为marbles 的 int 类型的数组,应该如何调用函数

    可能:tolal = sum(marbles); "如果是这么调用的 那么 该函数的原型是什么????"
    

    需要记住的是:数组名 是该数组首元素的地址,所以实际传入的参数marbles是一个存储int 类型值的地址,
    应该把它赋给一个指针形式参数,即形参是指向int 的指针;

    int sum(int* ar) ;"对应的参数原型函数???"
    

    sum 函数从参数中获取了那些信息,"他获得了该数组的元素的地址",从该位置找出一个整数,
    需要注意 传入的参数中,没有携带数组包含多少个元素的信息;

    "书本表述:它获得了该数组的元素的地址":可以看出int* a 这样写更符合需要传入的是实际参数指针 a == &marbles[0] !!!!
    
    两种方法让函数获得 传入数组的 元素个数
    一个只有一个参数:代码中写上固定大小
    int sum(int* ar) {
    for(int i ;i<10;i++){
    } 
    }
    
    第二个是:多传一个参数
    int sum(int* ar,int n) {
    
    }
    "第一个参数 告诉函数该数组的地址和数据类型,第二个是告诉数组中的元素个数"
    

    需要注意的是:只有在函数原型或者函数定义头中才能用:

     int sum(int ar [ ],int n)  替换 int sum(int* ar,int n) ;
    函数原型的概念:(百度百科)函数原型类似函数定义时的[函数头]又称函数声明。
    C语言存在.h文件中先声明(原型函数)  后在.c文件中(函数定义) 调用 实现代码块中的逻辑;
    可以理解为只能定义函数的 返回值 函数名 参数 中的"参数"中替换使用;
    

    结论:
    int* a 与 int ar[ ] 形式都是表示 ar指向int类型的指针,但是int ar[ ]只能声明形式参数。
    int sum(int ar [ ],int n) 格式提醒读者 指针 ar 指向不仅仅是一个int类型值,还是一个int 类型的数组元素;

    c primer plus  p293
    指针是标示数组的开始,可以采用形式参数: 一个指针指向数组的开头 一个指向数组的结尾 ;
    "实际 中 调用函数怎么传实际参数???"
    将数组名传入 (数组名函数的形式参数中:代表数组的首元素的位置)
    指针ar 可以 ar++代表指向下一个元素的位置
    *p 中的 p
    
    c primer plus  p294
    因为++的优先级比 *高  所以*p ++ = 100; *++p = 200;"都没有改变原来数组中各个位置保存的值"
    但是:(*p)++ = 300 ;" 将p指针指向的下一个位置的数据改为了300,改变了原来的数组"
    

    相关文章

      网友评论

          本文标题:2019-05-10(函数传参 使用指针 和不使用指针格式)

          本文链接:https://www.haomeiwen.com/subject/vetooqtx.html