【问题标题】:how to call a function with a pointer as its argument [duplicate]如何以指针作为参数调用函数[重复]
【发布时间】:2019-12-07 20:39:25
【问题描述】:

什么问题?我想发送一个指向函数的多维指针作为它的参数。但是我收到了这个错误

Check nevis.exe 在 0x00007FF770A92231 处引发异常:0xC0000005:访问冲突读取位置 0x0000000400000007。

我做错了什么?这个错误是什么意思?

#include <stdio.h>
test(int *ptr)
{
    printf("%d", *(*(ptr+1)+1));
}
int main()
{
    int a[2][3] = { { 1,2,3 }, { 4,5,6 } };
    int(*ptr)[2][3]=&a;
    test(ptr);
    return 0;
}

【问题讨论】:

  • 带有一个 int* 指针,你不能在上面使用 * 两次!你想打印什么?
  • Asadiyan,test() 你想要什么返回类型?
  • int(*ptr)[2][3]=&amp;a; 很可能只是int** ptr = a
  • 那么你的函数应该在 int** 上以访问二维
  • @B.Go 肯定不是。

标签: c pointers exception multidimensional-array


【解决方案1】:

你需要有指向 int 的指针:

void test(int **ptr)
{
    printf("%d", ptr[1][1]);
}

int main()
{
    int a[2][3] = { { 1,2,3 }, { 4,5,6 } };
    int **ptr = a;
    test(ptr);
    return 0;
}

注意:最好在函数前面加上“void”前缀,该函数不返回任何内容。可能您收到了警告 - 永远不要忽略警告!

【讨论】:

  • ptr[1][1] 和 *(*(ptr+1)) 有什么区别
  • 我尝试了代码,但又遇到了同样的错误
  • 和同一个位置?
  • int **ptr 肯定int (*)[3]兼容
  • *(*(ptr + 1))ptr[1][0] 相同,反之则不然。
猜你喜欢
  • 2014-07-16
  • 1970-01-01
  • 2013-03-16
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多