如何在C编程中取消引用多维数组?

时间:2014-11-29 13:33:08

标签: c arrays multidimensional-array call dereference

我想将指针传递给多维数组,因此可以保留不复制的值。我该怎么做?我也一直跟踪int计数,它每次都会工作吗?我需要的数组是内存。结构已经在main之外声明了。

struct registers
{
   int data;     
} registerX, registerY;

void first(int *counter, struct registers* X1, int **m)
{
  int value;
  printf("Enter the value for the X\n");
  scanf("%d", &value);
  X1->data = value;
  m[*counter][1] = X1->data;
  *counter = *counter++;

}
int main()
{
 int memory[SIZE][2];
 int count = 0;
 int choice;
 printf("Enter the instruction number:\n");

 while(choice != 107)
{
  scanf("%d", &choice);
  if(choice == 101)
  {
        memory[count][0] = 101;
        first(&count, &registerX, &memory[count][1]);
  } 

2 个答案:

答案 0 :(得分:2)

函数签名应为:

void first(int *counter, struct registers* X1, int m[][2])

或等效地:

void first(int *counter, struct registers* X1, int (*m)[2])

电话应该是:

first(&count, &registerX, memory);

答案 1 :(得分:0)

  • 首先,除了Kerrek SB所说的,你可以替换

    *counter = *counter++;
    

    用这个

    (*counter)++;
    

    编辑:抱歉,我试图说出* counter = * counter ++有什么问题我犯了一个错误,但是我用句子*指针= *指针++得到了一些奇怪的结果。

    < / LI>
  • 其次,我发现你使用的是registerX,它只是一种类型,所以你可以先这样做。

    registerX *rgx = NULL;
    rgx = malloc(sizeof(registerX));
    

    并使用。

    first(&count, rgx, memory);
    

考虑到我上面所说的,这段代码对我有用。

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

#define SIZE 5

typedef struct registers {
    int data;     
} registerX, registerY;

void first(int *counter, struct registers *X1, int m[][2]) {
    int value;

    printf("Enter the value for the X: ");
    scanf("%d", &value);

    X1->data = value;
    m[*counter][1] = X1->data;

    (*counter)++;

    return ;
}

int main() {
    int memory[SIZE][2];
    int count = 0;
    int choice;

    registerX *rgx = NULL;
    rgx = malloc(sizeof(registerX));

    printf("Enter the instruction number: ");

    while(choice != 107) {
        scanf("%d", &choice);

        if (choice == 101) {
            memory[count][0] = 101;
            first(&count, rgx, memory);
            printf("Number %d was stored in memory[%d][%d]\n\n", memory[count-1][1], count-1, 1);
        }

        printf("Enter more instructions: ");
    }

    return 0;
}