【发布时间】:2023-03-04 22:28:01
【问题描述】:
我是 C 中数组编程和学习指针的新手。看看下面的程序。
第一期节目
#include<stdio.h>
int fun();
int main()
{
int num[3][3]={21,325,524,52,0,6514,61,33,85};
fun(num);
printf("%d",*(*(num+1)+1));
*(*(num+1)+1)=0;
printf("%d",*(*(num+1)+1));
return 0;
}
int fun(int **p)
{
*(*(p+1)+1)=2135;
return 0;
}
第二个节目
#include<stdio.h>
int fun();
int main()
{
int num[3][3]={21,325,524,52,0,6514,61,33,85};
fun(num);
printf("%d",*(*(num+1)+1));
*(*(num+1)+1)=0;
printf("%d",*(*(num+1)+1));
return 0;
}
int fun(int *p)
{
*((p+1)+1)=2135;
return 0;
}
第三期节目
#include<stdio.h>
int fun();
int main()
{
int num[3][3]={21,325,524,52,0,6514,61,33,85};
fun(num);
printf("%d",*(*(num+1)+1));
*(*(num+1)+1)=0;
printf("%d",*(*(num+1)+1));
return 0;
}
int fun(int (*p)[3])
{
*(*(p+1)+1)=2135;
return 0;
}
- 在第一个程序中
**p用于fun()函数,我认为它应该是正确的,并且在该函数中我编写了*(*(p+1)+1)来更改第一个数组的第一个元素。但是在编译这个程序时它显示error: invalid type argument of unary '*' (have 'int')。据我所知,num 是一个指向数组的指针,它保存着num[1]的地址,它又保存着num[1][0]的地址。 - 在编译第二个程序时,编译器没有显示错误。
*((p+1)+1)=0正在改变第一个数组的第二个元素的值。为什么它改变第零个数组的第二个元素的值而不是第一个数组的第一个元素的值?如何?应该是*(*(p+1)+1)=0。
- 在第三个程序中,编译器没有显示错误,并且显示了正确的结果。如何?。
*(p)[3]是什么意思?
我已经搜索过,但没有找到满意的结果。
【问题讨论】:
-
请删除所有出现的“+0”,然后删除所有不必要的大括号。它们没有用,会引起严重的头痛。
-
数组名是指向数组第一个元素的指针。也许在内部它并不完全相同,但您可以将其用作指针。
-
我已经编辑了这个问题。 :)
-
int *(p)[3]与int *p[3]相同,但与int (*p)[3]不同。你可能是指后者 -
@MattMcNabb 我已经编辑了这个问题。 :) 顺便说一句,感谢您的回复。
标签: c function pointers function-pointers memory-address