我在第4行收到错误,说“初始化程序无效”。我知道错误意味着什么,但我无法理解为什么我得到错误。我已经尝试了各种指针和值的组合,但它似乎并不想工作。任何有关代码的帮助/反馈将不胜感激。
注意:我计划为棋盘设置一个2D数组,这意味着内存malloc的64个内存。 printf是为了让编译器满意,并告诉我[4] [2]是否有'0'。
int *newBoard();
int main(int argc, char *argv[]) {
int *chessBoard[7][7] = *newBoard();
printf ("%d", chessBoard[4][2]);
return EXIT_SUCCESS;
}
int *newBoard() {
int counter = 0;
int *blankBoard = malloc(sizeof((int) * TOTALSPACES));
while (counter < TOTALSPACES) {
blankBoard[counter] = VACANT;
counter++;
}
return blankBoard;
}
答案 0 :(得分:1)
newBoard
返回一个TOTALSPACES整数数组。 int *chessBoard[7][7] = *newBoard();
LHS是一个7x7的int指针数组(不是整数)。 RHS是什么,调用返回的int指针的内容? (您认为*
的呼叫前面newBoard()
正在做什么?
int *newBoard = newBoard();
(使用堆内存)或int newBoard[7][7];
(使用堆栈内存)都可以。你试图做一半!
答案 1 :(得分:0)
int *chessBoard[7][7]
代表2D数组(7 * 7),每个元素类型为int*
;
但是*newBoard()
代表一个int元素。
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#define TOTALSPACES 8*8
#define VACANT '0'
void *newBoard();
int main(int argc, char *argv[]) {
int (*chessBoard)[8][8] = newBoard();
printf ("%d", (*chessBoard)[4][2]);//48 : '0'
return EXIT_SUCCESS;
}
void *newBoard() {
int *blankBoard = malloc(sizeof(int) * TOTALSPACES);
int counter = 0;
while (counter < TOTALSPACES)
blankBoard[counter++] = VACANT;
return blankBoard;
}