小白一个, 想问一下函数的参数为二维指针的问题

HawkJW 2018-09-17 08:07:24
#include <stdio.h>
void lian(char **);
int main(void)
{
int shu[2][3] = { {1,2,3}, {4, 5, 6} };
printf("shu point is %p\n", shu);
printf("*shu point is %p\n", *shu);
lian(shu);

system("pause");
return 0;
}
void lian(int *shu[8])
{
printf("shu point is %p\n", shu);
printf("*shu point is %p\n", *shu);
}
------------------------------------------------------------
shu point is 001DFD84
*shu point is 001DFD84
shu point is 001DFD84
*shu point is 00000001
请按任意键继续. . .
-----------------------------------------------------------------------------
很感谢能回答我的问题
我的问题是main函数中shu的值是001DFD84
而( * shu)的值是001DFD84
而在lian函数中,其shu有相同的值
为什么 * shu变了;
虽然参数为 shu[8],但其只传递main中shu的值001DFD84
而参数其实由8个指针组成的数组,近似于二位指针;可以做操作,
为什么会改变。
谢谢解答我的疑问
...全文
305 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
林多 2018-09-17
  • 打赏
  • 举报
回复
另外,举个二维数组,正确操作的例子。

#include <stdio.h>
void lian(int p[][3]);
int main(void)
{
int shu[2][3] = { {1,2,3}, {4, 5, 6} };
printf("shu point is %p\n", shu);
printf("*shu point is %p\n", *shu);
lian(shu);
return 0;
}

void lian(int shu[][3])
{
printf("shu point is %p\n", shu);
printf("*shu point is %d\n", shu[1][1]);
}

另外,也可以参考我的博客:
https://blog.csdn.net/zxc024000/article/details/78957907
林多 2018-09-17
  • 打赏
  • 举报
回复
问题的原因在于,有几个:
首选:
对于,二维数组P[10][10]:
P代表二维数组首地址,*P代表 P[0][10]的地址,**P代表P[0][0]的值。

对于,一维数据P[10];
P代表一维数组首地址,*P代表P[0]的值。


其次,指针和数组,并不等价。并不是,把数组首地址,赋给指针后。指针就可以当,数组来用。

首选:
lian(shu); 传递给函数的参数,为二维数组的首地址。

然后:
void lian(int *shu[8]),将二维数组的首地址(就是个地址值),转为一维数组首地址类型(一维的,指针数组)。

然后:
在 lian 函数中。
printf("shu point is %p\n", shu); 输出的为shu地址值,这个没什么问题,因为即使做了类型转换,首地址的值并没有变。

然后:
在lian函数中。
printf("shu point is %p\n", *shu),输出的为shu[0]的值。此时,要去shu地址指向的地方,取其值,而这个值,就是1 。

所以,你用%p的方式,输出int型的1,自然为00000001。


补充:
void lian(char **); 应该写错了吧,应该是void lian(int **);
而且,这版的代码,只能gcc,g++是编不过的。


636f6c696e 2018-09-17
  • 打赏
  • 举报
回复
变量类型不一样,第一个打印时变量类型是**,第二个打印时变量类型是*
薛定谔之死猫 2018-09-17
  • 打赏
  • 举报
回复
程序写的类型相容没有警告是个好习惯,虽然能运行不可控那就白写了,建议先把类型转换加上~

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧