空羊羊 发表于 2020-11-2 20:53:27

如何将一个二维数组赋值给一个指针数组

如果有一个已知的定义好的二维数组arr,我想要创建一个指针数组用来传递这个二维数组,那么在申明了“char *ptr;”之后应该怎么办?
我尝试了直接让“ptr=arr”好像不太行,小白求助各位大佬帮忙解答疑惑!

小甲鱼的铁粉 发表于 2020-11-2 20:57:39

char **p;
p = arr;
这样试试

空羊羊 发表于 2020-11-2 21:01:10

小甲鱼的铁粉 发表于 2020-11-2 20:57
这样试试

好像还是不太行 提示了warning: assignment from incompatible pointer type

风过无痕1989 发表于 2020-11-2 21:01:58

给你一个数组,你看懂了,你的问题就解决了,我就不改我程序里的变量名称了


#include<stdio.h>
int main()
{
    int i,j;
        int *p,*q,*r,(*t);
        int a = {{1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23}};
    p = &a;
    q = a;
    r = *a;
    t = a;


    // p = &a 的输出模式
        for (i = 0; i < 3; ++i)
        {
      for (j = 0; j < 4; ++j)
                {
            printf("%2d ", *p++);// 与 *(p + i * 4 + j) 等价
                }
      printf("\n");
        }
        printf("\n");

       
        // q = a 的输出模式
    for(i = 0;i < 3;i++)
    {
      for(j = 0;j < 4;j++)
                {
            printf("%2d ",*q++);// 与 *(q + i * 4 + j) 等价
                }
      printf("\n");
   }
   printf("\n");


    // r = *a 的输出模式
        for(i = 0;i < 3;i++)
    {
      for(j = 0;j < 4;j++)
                {
            printf("%2d ",*r++);// 与 *(r + i * 4 + j) 等价
                }
      printf("\n");
   }
   printf("\n");


    // t = a 的输出模式
        for (i = 0; i < 3;i++)
        {
      for (j = 0; j < 4;j++)
                {
            printf("%2d ", *(*(t + i) + j));
                }
      printf("\n");
        }
        printf("\n");

}

小甲鱼的铁粉 发表于 2020-11-2 21:05:24

空羊羊 发表于 2020-11-2 21:01
好像还是不太行 提示了warning: assignment from incompatible pointer type

我也不会了{:10_250:}

空羊羊 发表于 2020-11-2 21:11:57

风过无痕1989 发表于 2020-11-2 21:01
给你一个数组,你看懂了,你的问题就解决了,我就不改我程序里的变量名称了

谢谢大佬,但是我想要的效果是把这个二维数组传递给指针数组后,将指针数组作为函数的参数传递后,能够直接在函数内部通过对这个指针数组进行索引,直接得到其中的指针,也就是本来二维数组的每一行。要是用数组指针的话我感觉好像不能实现?

空羊羊 发表于 2020-11-2 21:12:29

小甲鱼的铁粉 发表于 2020-11-2 21:05
我也不会了

{:10_250:}

风过无痕1989 发表于 2020-11-2 21:24:58

空羊羊 发表于 2020-11-2 21:11
谢谢大佬,但是我想要的效果是把这个二维数组传递给指针数组后,将指针数组作为函数的参数传递后,能够直 ...

四种定义指针的模式,知道了怎么定义,也知道了该种模式下它的输出,利用指针进行地址传递,你不会吗?

风过无痕1989 发表于 2020-11-2 21:54:28

以下是以第四种模式定义函数,并通过指针的引用来传递参数的实例(这种定义模式,用得非常地广泛)


#include<stdio.h>
int main()
{
        int print(int(*t), int n);               // 定义一个输出函数
        int(*t);
        int a = { { 1, 3, 5, 7 },{ 9, 11, 13, 15 },{ 17, 19, 21, 23 } };
        t = a;
        print(t,3);                                    // 将数组的首地址及长度作为实参传递给调用函数
        return 0;
}

int print(int(*t), int n)
{
        int i, j;
        for (i = 0; i < n;i++)
        {
                for (j = 0; j < 4;j++)
                {
                        printf("%2d ", *(*(t + i) + j));
                }
                printf("\n");
        }
        printf("\n");
        return 0;

}

xieglt 发表于 2020-11-2 22:28:34

#include <stdio.h>
#include <string.h>

void output(char *p[])
{
        int i = 0;
        for(i = 0; i<5; i++)
        {
                printf("%s\n",p);
        }
}

void output1(char *p[])
{
        int i = 0;
        int j = 0;

        for(i=0; i<5 ; i ++)
        {
                for(j=0; j<strlen(p) ; j++)
                {
                        printf("%c",p);
                }
                printf("\n");
        }
}

int main()
{
        char arr;
        char *p;
        int i = 0;
        for(i = 0 ; i < 5 ; i++)
        {
                p = arr;
                scanf("%s",p);
        }

        output(p);
        output1(p);

        return 0;
}

乐乐学编程 发表于 2020-11-2 23:36:32

xieglt 发表于 2020-11-2 22:28


他一个函数都搞不明白,你还弄两个,他不晕才怪

空羊羊 发表于 2020-11-3 20:20:09

风过无痕1989 发表于 2020-11-2 21:54
以下是以第四种模式定义函数,并通过指针的引用来传递参数的实例(这种定义模式,用得非常地广泛)

谢谢大佬,明白了
页: [1]
查看完整版本: 如何将一个二维数组赋值给一个指针数组