C++通过指针传递/访问矩阵

发布于 2024-10-28 06:28:59 字数 530 浏览 2 评论 0原文

可能的重复:
C++ 的二维数组

嗨,我正在尝试将指针复制到我的矩阵m 传递给 C++ 中的函数。这就是我的代码试图表达的内容

#include <iostream>
using namespace std;

void func( char** p  )
{
    char** copy = p;
    cout << **copy;
}

int main()
{   
    char x[5][5];
    x[0][0] = 'H';
    func( (char**) &x);
    return 0;
}

但是,这给了我一个段错误。有人可以解释一下(最好是详细一些)我错过了什么底层机制吗? (以及修复它)

提前非常感谢:)

Possible Duplicate:
2D arrays with C++

Hi, I'm trying to copy a pointer to a matrix that i'm passing in to a function in C++. here's what my code is trying to express

#include <iostream>
using namespace std;

void func( char** p  )
{
    char** copy = p;
    cout << **copy;
}

int main()
{   
    char x[5][5];
    x[0][0] = 'H';
    func( (char**) &x);
    return 0;
}

However, this gives me a Seg Fault. Would someone please explain (preferrably in some detail) what underlying mechanism i'm missing out on? (and the fix for it)

Thanks much in advance :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

卷耳 2024-11-04 06:28:59

指向 5 个 5 个字符数组的数组的指针 (char x[5][5]) 的类型为“指向 5 个 5 个字符数组的数组的指针”,即 char( *p)[5][5]。类型 char** 与此无关。

#include <iostream>
using namespace std;

void func( char (*p)[5][5]  )
{
    char (*copy)[5][5] = p;
    cout << (*copy)[0][0];
}

int main()
{
    char x[5][5];
    x[0][0] = 'H';
    func(&x);
    return 0;
}

当然,还有许多其他方法可以通过引用或指针传递 2D 数组,正如注释中已经提到的。最详细的参考可能是 StackOverflow 自己的 C++ FAQ,How我在 C++ 中使用数组吗?

A pointer to an array of 5 arrays of 5 char (char x[5][5]) has the type "pointer to array of 5 arrays of 5 chars", that is char(*p)[5][5]. The type char** has nothing to do with this.

#include <iostream>
using namespace std;

void func( char (*p)[5][5]  )
{
    char (*copy)[5][5] = p;
    cout << (*copy)[0][0];
}

int main()
{
    char x[5][5];
    x[0][0] = 'H';
    func(&x);
    return 0;
}

Of course there are many other ways to pass a 2D array by reference or pointer, as already mentioned in comments. The most in-detail reference is probably StackOverflow's own C++ FAQ, How do I use arrays in C++?

远山浅 2024-11-04 06:28:59

char** 是一个指向指针(或指针数组)的指针。 &x 不是其中之一 - 它是一个指向二维字符数组的指针,可以隐式转换为指向单个字符的指针 (char * )。编译器可能给你一个错误,此时你进行了强制转换,但编译器试图告诉你一些重要的事情。

char** is a pointer to a pointer (or an array of pointers). &x is not one of those - it's a pointer to a two-dimensional array of chars, which can be implicitly converted to a pointer to a single char (char *). The compiler probably gave you an error, at which point you put in the cast, but the compiler was trying to tell you something important.

怪我太投入 2024-11-04 06:28:59

尝试这个而不是使用 char**:

#include <iostream>
using namespace std;

void func( char* &p  )
{
    char* copy = p;
    cout << copy[0];
}

int main()
{   
    char x[5][5];
    x[0][0] = 'H';
    func(&x[0]);
    return 0;
}

Try this instead of using a char**:

#include <iostream>
using namespace std;

void func( char* &p  )
{
    char* copy = p;
    cout << copy[0];
}

int main()
{   
    char x[5][5];
    x[0][0] = 'H';
    func(&x[0]);
    return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文