【问题标题】:Integer pointers and the 'incompatible pointer type warning'整数指针和“不兼容的指针类型警告”
【发布时间】:2014-03-03 07:45:42
【问题描述】:

我已经阅读了很多关于这个问题的回复,但由于它与我的代码有关,所以我不理解它,所以我必须询问并希望清楚。

该程序是我期中考试的魔方验证程序,代码运行和输出正常,但我收到警告,所以我想在提交之前清理它。实际上有两个位会发出警告,但我希望理解第一个能帮助我清理第二个,因为我想理解的不仅仅是粘贴答案。

有问题的代码:

int ms[COLS][COLS] = 
{
{16,  3,  2, 13 },
{ 5, 10, 11,  8 },
{ 9,  6,  7, 12 },
{ 4, 15, 14,  1 }
}; 

const int* msPtr = ms;

我正在尝试设置一个指向数组第一个元素的常量整数指针,我可以将其传递给函数,以便它们可以使用但不能修改我的数组值。我怀疑我需要在此处“强制转换”某些内容或出现语法错误。

警告是“[警告]从不兼容的指针类型初始化”指的是“const int* msPtr = ms;”上面一行。

感谢您的宝贵时间。

【问题讨论】:

    标签: c pointers integer warnings


    【解决方案1】:

    你可以这样做:

    const int * pointer_to_1st_int_of_ms = &ms[0][0];
    

    【讨论】:

    • 所以当我读到它时,顺便说一句,我正在创建一个指针,它是一个常量整数,其地址值位于 (&) ms [0][0]。
    • 名称混乱; msPtr 应该是 int**。
    • &ms[0][0] 返回int *
    • 谢谢,我现在知道了它是如何工作的,并且能够获得指向整个数组的指针。我现在有干净的代码和一些更深层次的问题要问我的教授!
    【解决方案2】:

    应该是

    const int (* msPtr)[COLS] = ms;
    

    由于 ms 是二维数组,所以需要二维 int 指针。

    【讨论】:

    • 那么这是铸造 msPtr 吗?它似乎对我不起作用,但我想我将使用它来将整个数组传递给第二个函数,看看它是否有效。
    • 它是一个二维指针,所以你需要使用 **msPtr 来获取特定索引的值。
    • 也是正确的,但是它不是指向二维数组中第一个int 的指针,而是指向二维数组中的第一个一维数组的指针。
    • 我能够使用您的示例来敲除我认为的指向整个数组 const int (*arPtr)[COLS][COLS] = &ms; 的指针,无论如何我都能够使用 @987654324 从我的函数中获得预期的输出@。谢谢。
    猜你喜欢
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多