通过二维数组在C使用指针的功能 [英] passing 2d array to function using pointers in c

查看:105
本文介绍了通过二维数组在C使用指针的功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我第一次不得不问一个问题在这里通常不需要,但这个时候,我只是无法弄清楚。
基本上我试图创建在1和0(1和在随机的地方0)的控制台的网格。在1秒被木屑和0重新presenting空白。
要做到这一点我必须使用此函数初始化并填充一个二维数组,并返回指针数组成品

 为int * createEnvironment(INT宽度,高度INT,INT numWoodChips)

然后我再需要使用此功能打印二维数组

 无效printEvrionment为(int *环境,诠释的宽度,高度INT)

这是我迄今为止

  INT enviroWidth = 20;
INT enviroHeight = 20;
为int * createEnvironment(INT宽度,高度INT,诠释numWoodChips);
无效printEvrionment为(int *环境,诠释的宽度,高度INT);
无效freeArray(INT宽度,诠释*环境);
INT主(INT ARGC,字符** argv的)
{为int * ARR = createEnvironment(enviroWidth,enviroHeight,10);
printEvrionment(ARR,enviroWidth,enviroHeight);的getchar();
freeArray(enviroHeight,ARR);
返回0;
}为int * createEnvironment(INT宽度,高度INT,INT numWoodChips)
{
INT民= 1;
/ * randNum =(RAND()%1)+ 0; * /
INT TEMP = 3;
INT woodChipCounter = 0;
INT计数器= 0;
INT *阵列;
阵列=的malloc(sizeof的(阵列)*高*宽);对于(INT J = 0; J<高度; J ++)
{
    的for(int i = 0; I<宽度;我++)
    {
        反++;
        如果(反==温度)
        {
            数组[J *宽度+ 1] = 1;
            临时++;
            woodChipCounter ++;
            计数器= 0;
        }
        其他
        {
            数组[J *宽度+ 1] = 0;
        }        如果(woodChipCounter == numWoodChips)
        {
            民= 0;
        }
    }
}
返回数组;
}无效printEvrionment为(int *环境,诠释的宽度,高度INT)
{
对于(INT J = 0; J<高度; J ++)
{
    的printf(\\ n);
    的for(int i = 0; I<宽度;我++)
    {
        的printf(%D,环境研究[J]);    }
}
}无效freeArray(INT高度,诠释*环境)
{
的for(int i = 0; I<高度;我++)
{
    免费(环境[I]);
}
免费(环境);
}


解决方案

 的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;
#包括LT&;&time.h中GT;
#包括LT&;&string.h中GT;INT enviroWidth = 20;
INT enviroHeight = 20;字符* createEnvironment(INT宽度,高度INT,诠释numWoodChips);
无效printEvrionment(字符*环境,诠释的宽度,高度INT);
//无效freeArray(INT宽度,诠释*环境);INT主(INT ARGC,字符** argv的){
    字符* ARR = createEnvironment(enviroWidth,enviroHeight,10);    printEvrionment(ARR,enviroWidth,enviroHeight);    的getchar();
    // freeArray(enviroHeight,ARR);
    免费(ARR);
    返回0;
}字符* createEnvironment(INT宽度,高度INT,INT numWoodChips){
    函数srand(时间(NULL));
    INT LEN =宽*高;
    的char *数组=的malloc(LEN);    如果(numWoodChips> LEN)
        numWoodChips = LEN;    memset的(阵列,'1',numWoodChips);
    memset的(数组+ numWoodChips,'0',LEN - numWoodChips);    的for(int i = 0; I< numWoodChips ++我){
        焦炭TMP;
        INT POS =兰特()%LEN;
        //交换阵列[i]和阵列[POS]
        TMP =阵列[我]
        数组[我] =阵列[POS]
        数组[POS] = tmp目录;
    }    返回数组;
}无效printEvrionment(字符*环境,诠释的宽度,高度INT){
    的printf(\\ n);
    对于(INT J = 0; J<高度; ++ j)条{
        的for(int i = 0; I<宽度; ++ I){
            的printf(%C,环境[宽* J + I]);
        }
        的printf(\\ n);
    }
}

this is first time I've had to ask a question here usually don't need but this time i just can't figure it out. Basically i'm trying to create a grid in the console of 1s and 0s (1s and 0s in random places). the 1s being wood chips and 0s representing blank space. to do this i have to use this function which initializes and populates a 2d array and returns the pointer to the finished array

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

i then then need to print the 2d array using this function

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

this is what i have so far

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);
}

解决方案

#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");
    }
}

这篇关于通过二维数组在C使用指针的功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆