指针作为函数参数
#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;
} getArr函数第一个参数接受的是数组的首地址,为什么不能通过*(P+i)打印出数组的元素啊?为什么p反而可以呢?p不是一个指针吗?指针应该通过括号而不是[]进行操作啊。 数组不用解引用直接输出地址首地址就行了直接printf("%d\n", p【i】);还有为啥for里面有i++你外面还要i++我没看懂可能是你需要的吧。 额,你的理解可能有些问题
要么用 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;
} 说的对 本帖最后由 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++那个应该注释掉的) 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;
}
人造人 发表于 2021-7-12 22:07
*p(i) 这个写法和数组没有关系,这是函数调用
调用函数应该是P(i)吧。你写的*p(i)是对ib进行解引用,返回的是ib的值。 ()优先级大于 *
()要么聚拢作用 要么表示函数
p()编译器会认为是个函数 肯定错了。
p == *(p+i) 是个语法糖 wuxianbiao 发表于 2021-7-12 22:22
调用函数应该是P(i)吧。你写的*p(i)是对ib进行解引用,返回的是ib的值。
对呀,这是函数调用
调用函数 p 得到 ia 变量的地址
然后再用 * 进行解引用,得到 ia
你的问题是数组,*p(i) 是函数调用+对函数返回值解引用
人造人 发表于 2021-7-13 19:16
对呀,这是函数调用
调用函数 p 得到 ia 变量的地址
然后再用 * 进行解引用,得到 ia
嗯嗯,我的程序里应该改成*(p+i)。
页:
[1]