用自定义函数打印地址位置的值和main函数给我不同的值

问题描述 投票:0回答:1

我试图编写一个函数来创建给定形状的数组(具有“a”行和“b”列)并返回该数组的基址。

代码:

#include<stdio.h>

int *ones(int a, int b){
    int one_arr[a][b], *p;
    
    for(int i=0;i<a;i++){
    for(int j=0;j<b;j++){
        one_arr[i][j] = 1;
    }
    }

    p = &one_arr;
    for(int i=0;i<(a*b);i++){
    printf("%u -- %d\n", p+i, *(p+i));
    }
    return(p);
}

int main(){
    int a=3, b=3,;
    int* p;
    p = ones(a,b);
    printf("\n");

    for(int i=0;i<(a*b);i++){
    printf("%u -- %d\n", p+i, *(p+i));
    }
}

输出:

prog1.c: In function 'ones':
prog1.c:12:11: warning: assignment to 'int *' from incompatible pointer type 'int (*)[a][b]' [-Wincompatible-pointer-types]
   12 |         p = &one_arr;
      |           ^
3772775440 -- 1
3772775444 -- 1
3772775448 -- 1
3772775452 -- 1
3772775456 -- 1
3772775460 -- 1
3772775464 -- 1
3772775468 -- 1
3772775472 -- 1

3772775440 -- 0
3772775444 -- 0
3772775448 -- 0
3772775452 -- 0
3772775456 -- -522191656
3772775460 -- 239
3772775464 -- 1009985511
3772775468 -- 32759
3772775472 -- 1

当我尝试使用函数本身(一个)中的基地址打印数组中的值时,效果很好。但是当我尝试使用主函数中返回的指针显示值时,它正在打印出这些垃圾。

arrays c pointers multidimensional-array
1个回答
0
投票

返回指向局部变量的指针是未定义的行为。您要么需要传入变量并对其进行初始化,要么对其进行 calloc/malloc。 3 后面的逗号是语法错误。不要混合使用

int *
和 int
[a][b]
语法。这是两个不同的东西。

int *ones(int a, int b) {
    int *p = malloc((a * b) * sizeof(int));
    memset(p, 1, a * b);
    for(int i = 0; i < a * b; i++)
        p[i] = 1;
    return p;
}
© www.soinside.com 2019 - 2024. All rights reserved.