C : Pointers and functions 2DArray

标签 c pointers

我真的是 C 编程语言的初学者,我已经开始学习指针了……我在操作它们时遇到了一些问题。 我想做的是读写一个矩阵,有 2 个函数,不使用全局变量(只是指针)......所以我没有成功做到这一点。我搜索了很多关于指针的信息,我试图理解如何使用它们,但我无法读写那个矩阵我做错了什么......拜托,拜托,请帮助我(即使有一些有用的关于 2DArray 和指针的链接)...谢谢!

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

void readM(int (*x)[100][100], int *row, int *column)
{
int i,j;
printf("Row no: ");
scanf("%d",row);
printf("Column no: ");
scanf("%d",column);
printf("Matrix elemnts: \n");    
for(i=0;i<(*row);i++)
{
    for(j=0;j<(*column);j++)
    {
        printf("[%d][%d]=",i,j);
        scanf("%d",x[i][j]);
    }
}
}

void writeM(int (*x)[][100], int *row, int *column)
{
int i,j;
printf("\nMatrix is: \n");
for(i=0;i<(*row);i++){
    for (j=0;j<(*column);j++){
    printf("%d",(*x)[i][j]);
    }
    printf("\n");
    }
}

int main()
{

char choice;
int a[100][100],m,n;
do
{
   printf("\nChose an option\n\n"
      "1) read matrix \n"
      "2) write matrix\n"
      "3) display matrix in spiral\n"
      "4) return max and min\n"
      ///...etc
   scanf("%c", &choice);
   while (choice<'0'|| choice>'4')
         {
            printf("\nInvalid option! Chose again! \n\n");
            scanf("%c",&choice);
         }
   switch (choice)
   {
        case '0': exit(0);
        case '1': readM(&a,&m,&n); break;
        case '2': writeM(&a,&m,&n);break; /// ... etc
} while (choice !=5);
getch();
}

最佳答案

另一个问题是,当您读取数组时,您首先跟随指针 (*x),然后添加数组偏移量 [i][j]:这可能会让您到达某个您不知道的内存位置甚至无法访问。由于您要传递的是一个指针数组,因此您应该先查看数字位置 (x[i][j]),然后再跟随指针。

编辑:之前的用户更新了他的答案以反射(reflect)我在这里给出的第二个建议,所以我删除了它。

关于C : Pointers and functions 2DArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13212982/

相关文章:

android - Tizen 蓝牙 SPP 接收数据但发送时 BT_ERROR_PERMISSION_DENIED

c - 短语 (int const * const b) 在 C 中是什么意思?

c# - IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2 常数值

c - 函数指针和void指针

c++ - #pragma once 的问题

c - 如何修复 swapBack 函数以获得我想要的结果?

C++ 我的字符串类 : Pointer doesn't work

c - 如何创建一个正确的数组,可以通过 char** 引用该数组以将参数传递给 LSF-API

c - 将从 C 例程分配的数组传递给 Ada

c - 使用 WinHTTP (C++) 获取请求头