wuxianbiao 发表于 2021-7-11 22:59:11

指针作为函数参数

#include <stdio.h>
void getArr(int *p,int len)
{
        for (int i = 0; i < len; i++)
        {
                printf("%d\n", *p(i));//p指向数组的首地址,为什么不能解引用
                i++;
        }
}
int main(void)
{
        int arr = { 1,2,4,5,1 };
        getArr(arr, 5);
        return 0;
}

wuxianbiao 发表于 2021-7-11 23:04:39

getArr函数第一个参数接受的是数组的首地址,为什么不能通过*(P+i)打印出数组的元素啊?为什么p反而可以呢?p不是一个指针吗?指针应该通过括号而不是[]进行操作啊。

李现实 发表于 2021-7-12 07:54:27

数组不用解引用直接输出地址首地址就行了直接printf("%d\n", p【i】);还有为啥for里面有i++你外面还要i++我没看懂可能是你需要的吧。

qiuyouzhi 发表于 2021-7-12 09:55:07

额,你的理解可能有些问题
要么用 p 访问,要么用 *(p + i)
#include <stdio.h>
void getArr(int *p,int len)
{
    for (int i = 0; i < len; i++)
    {
      printf("%d\n", *(p + i));//p指向数组的首地址,为什么不能解引用
      i++;
    }
}
int main(void)
{
    int arr = { 1,2,4,5,1 };
    getArr(arr, 5);
    return 0;
}

Kayko 发表于 2021-7-12 11:46:31

说的对

wuxianbiao 发表于 2021-7-12 21:58:00

本帖最后由 wuxianbiao 于 2021-7-12 21:59 编辑

李现实 发表于 2021-7-12 07:54
数组不用解引用直接输出地址首地址就行了直接printf("%d\n", p【i】);还有为啥for里面有i++你外面还要i++我 ...

我意思是传进来的是数组首地址,p指向了这个地址,如果访问数组元素,应该是*p(i)。退一步说,数组不用解引用,那也应该是p(i),而不是p。         (i++那个应该注释掉的)

人造人 发表于 2021-7-12 22:07:29

wuxianbiao 发表于 2021-7-12 21:58
我意思是传进来的是数组首地址,p指向了这个地址,如果访问数组元素,应该是*p(i)。退一步说,数组不 ...

*p(i) 这个写法和数组没有关系,这是函数调用
#include <stdio.h>

int *p(int i) {
    static int ia = 10;
    static int ib = 100;
    if(i) return &ia;
    return &ib;
}

int main(void) {
    int i = 1;
    *p(i) = 123;
    return 0;
}

wuxianbiao 发表于 2021-7-12 22:22:42

人造人 发表于 2021-7-12 22:07
*p(i) 这个写法和数组没有关系,这是函数调用

调用函数应该是P(i)吧。你写的*p(i)是对ib进行解引用,返回的是ib的值。

万千只cnm 发表于 2021-7-13 18:40:27

()优先级大于 *
()要么聚拢作用 要么表示函数
p()编译器会认为是个函数 肯定错了。

p == *(p+i)   是个语法糖

人造人 发表于 2021-7-13 19:16:59

wuxianbiao 发表于 2021-7-12 22:22
调用函数应该是P(i)吧。你写的*p(i)是对ib进行解引用,返回的是ib的值。

对呀,这是函数调用
调用函数 p 得到 ia 变量的地址
然后再用 * 进行解引用,得到 ia
你的问题是数组,*p(i) 是函数调用+对函数返回值解引用

wuxianbiao 发表于 2021-7-13 21:32:03

人造人 发表于 2021-7-13 19:16
对呀,这是函数调用
调用函数 p 得到 ia 变量的地址
然后再用 * 进行解引用,得到 ia


嗯嗯,我的程序里应该改成*(p+i)。
页: [1]
查看完整版本: 指针作为函数参数