HawkJW
2018-09-16 13:42
采纳率: 100%
浏览 911
已采纳

c语言,函数的参数为二维指针的问题

#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(char *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个指针组成的数组,近似于二位指针;可以做
操作,
为什么会改变。
谢谢解答我的疑问

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • ailaillia 2018-09-17 01:48
    已采纳

    char *shu[8])改成int (*shu)[3] ,前者代表指正数组,后者代表数组指针。而且两者数据类型不一样

    #include
    #include

    void lian(int (*shu)[3]);
    int main(int argc ,char** argvs)
    {
    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 1;
    

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

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • qq_31529623 2018-09-16 15:21

    void lian(char *shu[8])
    {
    printf("shu point is %p\n", shu);
    printf("*shu point is %p\n", *shu);
    }
    *shu --》 shu[0] 本质上是一个char型的变量, 其变量地址自然和 int型的地址不一致,建议从这个角度去考虑

    评论
    解决 无用
    打赏 举报
  • will200811 2018-09-17 01:30

    赞成楼上。这种转换在VS2012中已不被支持。指针类型不同。一个是char一个是int.

    评论
    解决 无用
    打赏 举报
  • will200811 2018-09-17 01:33

    如果从钻研编译器的角度,可以考虑;如果研究编程,这种问题不建议继续。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题