通过二维数组在C使用指针的功能 [英] passing 2d array to function using pointers in c
本文介绍了通过二维数组在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屋!
查看全文