【问题标题】:passing 2d array to function using pointers in c使用c中的指针将二维数组传递给函数
【发布时间】:2014-05-09 08:43:35
【问题描述】:

这是我第一次不得不在这里问一个通常不需要的问题,但这次我就是想不通。 基本上我正在尝试在 1 和 0 的控制台中创建一个网格(随机位置的 1 和 0)。 1 代表木片,0 代表空白。 为此,我必须使用这个函数来初始化和填充二维数组并返回指向完成数组的指针

int* createEnvironment(int width, int height, int numWoodChips)

然后我需要使用这个函数打印二维数组

void printEvrionment(int* environment, int width, int height)

这就是我目前所拥有的

int enviroWidth = 20;
int enviroHeight = 20;
int* createEnvironment(int width, int height, int numWoodChips);
void printEvrionment(int* environment, int width, int height);
void freeArray(int width, int* environment);
int main(int argc, char **argv)
{

int *arr = createEnvironment(enviroWidth, enviroHeight, 10);
printEvrionment(arr, enviroWidth, enviroHeight);

getchar();
freeArray(enviroHeight, arr);
return 0;
}

int* createEnvironment(int width, int height, int numWoodChips)
{
int Num = 1;
/*randNum = (rand() % 1) + 0;*/
int temp = 3;
int woodChipCounter = 0;
int counter = 0;
int *array;
array = malloc(sizeof(array)*height *width);



for (int j = 0; j < height; j++)
{
    for (int i = 0; i < width; i++)
    {
        counter++;
        if (counter == temp)
        {
            array[j*width + i] = 1;
            temp++;
            woodChipCounter++;
            counter = 0;
        }
        else
        {
            array[j*width + i] = 0;
        }

        if (woodChipCounter == numWoodChips)
        {
            Num = 0;
        }
    }
}
return array;
}

void printEvrionment(int* environment, int width, int height)
{
for (int j = 0; j < height; j++)
{
    printf("\n");
    for (int i = 0; i < width; i++)
    {
        printf("%d", environment[j]);

    }
}
}

void freeArray(int height, int* environment)
{
for (int i = 0; i < height; i++)
{
    free(environment[i]);
}
free(environment);
}

【问题讨论】:

  • 在你的malloc中使用sizeof(*array);不是sizeof(array)。而且您的 freeArrayprintEnvironment 似乎最初都以 pointer 数组为中心,这不是您的代码分配的。
  • 那么,有什么问题?
  • 应该是printf("%d ", environment[j * width + i]);
  • 另外,在freeArray 中丢失循环。 malloc 只有一个电话,所以你只需要一个free
  • 这是我第一次在这里问问题你实际上并没有问问题。

标签: c function pointers multidimensional-array


【解决方案1】:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int enviroWidth = 20;
int enviroHeight = 20;

char *createEnvironment(int width, int height, int numWoodChips);
void printEvrionment(char *environment, int width, int height);
//void freeArray(int width, int* environment);

int main(int argc, char **argv){
    char *arr = createEnvironment(enviroWidth, enviroHeight, 10);

    printEvrionment(arr, enviroWidth, enviroHeight);

    getchar();
    //freeArray(enviroHeight, arr);
    free(arr);
    return 0;
}

char *createEnvironment(int width, int height, int numWoodChips){
    srand(time(NULL));
    int len = width * height;
    char *array = malloc(len);

    if(numWoodChips > len)
        numWoodChips = len;

    memset(array, '1', numWoodChips);
    memset(array + numWoodChips, '0', len - numWoodChips);

    for(int i=0;i<numWoodChips; ++i){
        char tmp;
        int pos = rand()%len;
        //swap array[i] and array[pos]
        tmp = array[i];
        array[i] = array[pos];
        array[pos] = tmp;
    }

    return array;
}

void printEvrionment(char *environment, int width, int height){
    printf("\n");
    for (int j = 0; j < height; ++j){
        for (int i = 0; i < width; ++i){
            printf("%c", environment[width * j + i]);
        }
        printf("\n");
    }
}

【讨论】:

  • 我如何将其更改为整数,因为 memset 仅是字符
  • @user3476732 我认为这正在更改为整数并且并不困难,但我似乎在 char 中已经足够了。
猜你喜欢
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 2011-07-16
相关资源
最近更新 更多