所以我有一个赋值,我需要通过将指针操作替换为数组操作来改变某些函数,并将字符串操作替换为字符操作。现在我对指针,数组,字符串等有了基本的了解,但是我无法理解我必须做什么,以及我应该如何去做。这是代码:
#include <stdio.h>
#pragma warning(disable: 4996)
// This program exercises the operations of pointers and arrays
#define maxrow 50
#define maxcolumn 50
char maze[maxrow][maxcolumn]; // Define a static array of arrays of characters.
int lastrow = 0;
// Forward Declarations
#define triple(x) x % 3 == 0
void initialization(int, int);
void randommaze(int, int);
void printmaze(int, int);
void initialization(int r, int c) {
int i, j;
for (i = 0; i < r; i++){
maze[i][0] = 'X'; // add border
maze[i][c - 1] = 'X'; // add border
maze[i][c] = '\0'; // add string terminator
for (j = 1; j < c - 1; j++)
{
if ((i == 0) || (i == r - 1))
maze[i][j] = 'X'; // add border
else
maze[i][j] = ' '; // initialize with space
}
}
}
// Add 'X' into the maze at random positions
void randommaze(int r, int c) {
int i, j, d;
for (i = 1; i < r - 1; i++) {
for (j = 1; j < c - 2; j++) {
d = rand();
if (triple(d))
{
maze[i][j] = 'X';
}
}
}
i = rand() % (r - 2) + 1;
j = rand() % (c - 3) + 1;
maze[i][j] = 'S'; // define Starting point
do
{
i = rand() % (r - 2) + 1;
j = rand() % (c - 3) + 1;
} while (maze[i][j] == 'S');
maze[i][j] = 'G'; // define Goal point
}
// Print the maze
void printmaze(int r, int c) {
int i, j;
for (i = 0; i < r; i++) {
for (j = 0; j < c; j++)
printf("%c", maze[i][j]);
printf("\n");
}
}
void main() {
int row, column;
printf("Please enter two integers, which must be greater than 3 and less than maxrow and maxcolomn, respectively\n");
scanf("%d\n%d", &row, &column);
while ((row <= 3) || (column <= 3) || (row >= maxrow) || (column >= maxcolumn)) {
printf("both integers must be greater than 3. Row must be less than %d, and column less than %d. Please reenter\n", maxrow, maxcolumn);
scanf("%d\n%d", &row, &column);
}
initialization(row, column);
randommaze(row, column);
printmaze(row, column);
//encryptmaze(row, column);
//printmaze(row, column);
//decryptmaze(row, column);
//printmaze(row, column);
}
以下是我正在努力解决的问题:
通过将指针操作替换为所有数组操作来重写函数randommaze(row,column)。除了获取指针的初始值之外,您不能使用像迷宫[i] [j]这样的索引操作。
通过将字符串操作替换为所有字符操作来重写函数printmaze(row,column)。
如果有人能够向我解释我应该做什么以及我应该怎么做,我会非常感激。谢谢!
答案 0 :(得分:0)
问题2:
数组可以用作指向它的第一个成员的指针。因此,例如,array[0]
和*array
返回相同的东西 - 数组的第一个元素的值。由于数组是连续的内存块,如果向指向数组开头的指针递增(或添加偏移量),则指向数组的下一个元素。这意味着array[1]
和*(array + 1)
是相同的。
如果你有一个迭代索引数组的for循环,你也可以使用指针增量来编写它。例如:
/* Loop indexing an array */
int my_array [10];
int i = 0;
for(; i < 10; ++i) {
my_array[i] = 0;
}
/* Loop by offsetting a pointer */
int my_array [10];
int i = 0;
int *ptr = my_array; /* Make it point to the first member of the array*/
for(; i < 10; ++i) [
*(ptr + i) = 0;
}
/* Looping by incrementing the pointer */
int my_array [10];
int *ptr = my_array; /* Make it point to the first member of the array */
int *end_ptr = my_array + 10; /* Make a pointer pointing to one past the end of the array */
for(; ptr != end; ++ptr) [
*ptr = 0;
}
所有这些代码示例都做同样的事情。将0分配给数组的所有成员。如果你有一个多维数组,请记住它仍然只是一个连续的内存块。
问题3:
这个问题对我来说并不是那么清楚,所以我对你期望做的事情的解释可能有些偏差,但是因为你只是用printf
打印单个字符,我猜您应该使用函数来输出单个char。类似于putchar
。
希望这会引导你朝着正确的方向前进。
答案 1 :(得分:0)
听起来好像您正在从事数据结构课程。第一个挑战是构建数组映射函数。例如:
int main(int argc, char **argv)
{
int values[20][40];
values[0][0] = 1;
values[10][10] = 20;
/* Let's print these two ways */
printf("0,0: %d 10,10: %d\n", values[0][0], values[10][10]);
printf("0,0: %d 10,10: %d\n", *((*values) + (sizeof(int) * 0) + sizeof(int) * 0)), *((*values) + (sizeof(int) * 10) + sizeof(int) * 10)));
}
我们正在做的是获取2d数组中内存的第一个字节的地址(*值),然后添加一个原始字节数作为偏移量来定位来自&#34;数组的值#34;我们想要访问。
这样的练习的一个要点就是向您展示语言实际上是如何运作的。这是他的数组映射函数如何工作,并且可以用作基础,例如,稍后用于语言或编译器设计课程,以及更复杂的存储器结构的快速实现。
至于第二部分,由于没有实际的&#34;字符串&#34;我对此并不十分清楚。 C内置的操作。我需要更多详细信息。