繁体   English   中英

当我将指针传递给 function 时,解除对指针的引用不起作用。 为什么? (C)

[英]Dereferencing pointer to a pointer doesn't work when I pass it to a function. Why? (C)

我尝试了我能想到的一切。 我不知道我是否遗漏了一些明显的东西。 为什么会这样:

#include<stdio.h>

void test_matrix(int** matrix)
{
    for(int i=0; i<4; i++) {
        for(int j=0; j<4; j++) {
            printf("%d ", *(matrix+j+4*i));
        }
    }
    /**
    for(int i=0; i<4; i++) {
        for(int j=0; j<4; j++) {
            printf("%d ", *(*(matrix+i)+j));
        }
    }
    */
}
int main()
{
    int matrix[4][4];
    for(int i=0; i<4; i++)
        for(int j=0; j<4; j++)
            scanf("%d", &matrix[i][j]);
    test_matrix(matrix);
}

但是评论部分不起作用。 我也尝试了 matrix[i][j] ,它仍然无法正常工作。 我的程序超时。 编辑:我在 MAIN 中添加了 function 调用。

错误在于这个二维数组被布置为 4 x 4 = 16 个整数。 但是您的 function 需要一个指向指针的指针。

正确的是,在调用站点, matrix的地址作为参数提供。 但与某些评论者所说的不同,它不是指向int的指针,而是指向int -array 的指针。

要正确处理二维数组的这个地址,您需要告诉它您的 function,如下所示:

void test_matrix(int (*matrix)[4])
{
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", *(*(matrix + i) + j));
        }
    }
}

或像这样:

void test_matrix(int matrix[][4])
{
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", matrix[i][j]);
        }
    }
}

您使用哪种访问方式无关紧要,有时这只是品味问题。 这些表达式是等价的,实际上p[i]*(p + i)的语法糖:

*(*(matrix + i) + j)

matrix[i][j]

注意 1:正如一些评论者已经建议的那样,您应该将警告级别提高到最大并更正来源,直到处理完所有诊断。

注意 2:当您的 arrays 的尺寸大小不同时,您需要想办法将这些尺寸告诉您的 function。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM