【问题标题】:2D arrays and double pointers in C [duplicate]C中的二维数组和双指针
【发布时间】:2011-06-06 18:44:06
【问题描述】:

可能重复:
2D arrays and pointers.
(这不是那个问题的重复。在那个问题中,OP 正确地传递了一个指向 a-指针,问题在于取消引用未初始化的指针。这个问题是关于尝试将指向数组的指针传递给需要指向指针的函数的函数。)

为了与某些现有代码兼容,我需要将二维数组作为指针指针传递给函数。我已经简化了下面的代码。在它打印结构中的第一个值和函数printvalues 中的newptr 后,即“我的值是123,在结构123 中”,我得到一个段。过错。我错过了什么?

#include <stdio.h>
#include <stdlib.h>

typedef struct mystruct
{
   char  mychar [4][5];
} mystruct_t;

void printvalues( char** newptr )
{
  int i;
  mystruct_t * fd = (mystruct_t*)malloc(sizeof(*fd));
  for ( i = 0; i < 3; i++ )
  {
    strcpy(fd->mychar[i], newptr[i]);
    printf( "My value is %s and in struct %s\n", newptr[i], fd->mychar[i] );
  }
}

int main( int argc, char **argv )
{
   int i;
   char *ptr = malloc(4*sizeof(char));
   char **pptr = (char **) malloc(5*sizeof(char *));  

   char  abc[4][5] = { "123", "456", "789" };

   for ( i = 0; i < 3; i++ )
   {
      printf( "My value is %s\n", abc[i] );
   }

   ptr = abc;
   printvalues(&ptr );
}

【问题讨论】:

  • @lostinpointers:请不要简单地转发同样的问题。如果您认为这是一个不同的问题,您应该 (1) 确认之前的问题,(2) 说明您从那时起所做的工作,以及 (3) 具体说明这个问题是新问题。
  • 行:ptr = abc;(从下到上第三个)给我一个错误:warning: assignment from incompatible pointer type
  • 值得指出的是,虽然您可以使用foo[][] 访问存储在char** 中的数据,但它的语法char[][] 不同 .
  • 没注意到重复,打算删除我的答案。
  • 这实际上根本不是那个问题的重复!

标签: c pointers multidimensional-array


【解决方案1】:

如果你有一个二维数组(就像你对 abc 所做的那样)并且你只取消引用其中一个维度,你不能诚实地期望它解析为一个字符。它将解析为字符行的地址。

char  abc[4][5] = { "123", "456", "789" };

for ( i = 0; i < 3; i++ )
{
   printf( "My value is %s\n", abc[i] );
}

没有意义。你需要更多类似的东西:

char  abc[4][5] = { "123", "456", "789" };

for ( i = 0; i < 3; i++ )
{
   for (j = 0; j < 4; j++ )
   {
     printf( "My value is %c\n", abc[i][j] );
   }
}

【讨论】:

    猜你喜欢
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2017-06-11
    相关资源
    最近更新 更多