|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- void cleanChessboard(char *CB,int n){
- int i,j;
- for(i = 0;i < n;i++){
- for(j = 0;j < n;j++){
- *(CB + i) + j = '*';
- printf("%c",*(CB + i) + j);
- }
- }
- }
复制代码
这其中 *(CB + i) + j = '*'; 报错是 [Error] lvalue required as left operand of assignment
请问大佬们 *(CB + i) + j 与 cb【i】【j】(假定这个是指针指向的那个数组)一样么?请大佬说的详细一些。感激不尽。
- #include <stdio.h>
- void addBlack(int n,int m);
- void addWhite(int n,int m);
- void cleanChessBoard(char* CB,int n);
- void judge(void);
- char chessBoard[14][14]; //全局变量chessBoard[14][14]已定义
- int main(){
- char* CB;
- //char chessBoard[14][14]; //chessBoard已定义为全局变量,你cleanChessBoard(char* CB,int n);函数体中的打印也是操作的全局变量
- //CB = &chessBoard[14][14]; //这样取地址根本就不对,chessBoard[14][14]代表的是第15行第15个元素,而你数组下表是0~13。这里你一定要加强理解。
- //如果你本意想取整个数组的地址,这样你需要定义CB为char(*) [14][14]类型,即定义为char(*CB) [14][14] = &chessBoard;
- //CB = (char*) &chessBoard; //如果你就是很执着的想,CB定义为char* CB;,而又要通过CB=&chessBoard;来获取地址,
- //那么你可以修改为CB = (char *)&chessBoard;,这样就强制转换了指针类型。
- //CB为char* 类型,你是想取得是数组的首地址,所以应该修改为:
- CB = &chessBoard[0][0]; //CB指向全局变量的第一个元素,这时CB只知道它指向的是一个char元素,不知道指向的是一个数组
- cleanChessBoard(CB,14);
- return 0;
- }
- //void cleanChessboard(char* CB,int n){ //函数名定义字母写错大写的B写成了小写的b
- void cleanChessBoard(char* CB,int n){
- int i,j;
- for(i = 0;i < n;i++){
- for(j = 0;j < n;j++){
- if(i == 0 ){
- //*(*(CB + i) + j) = (char)j ; //用这种二维数组的指针直接作为参数传递时,
- //数组名退化为指针,函数并不知道数组的列数,
- //n对它来说是不可见的,即便使用*(*(CB + i) + j)。第一层解引用失败
- //为了指导这个函数如何解引用,也就是要人为地解引用,需要把这个二维数组的首元素地址传给函数,
- //于是就变成了下面的形式:
- *((CB + i*n) + j) = (char)j ;
- }
- else{
- //*(*(CB + i) + j) = '*' //这段代码结束缺少结束“;”号。同上也需要人为地解引用
- *((CB + i*n) + j) = '*';
- }
- printf("%c",chessBoard[i][j]); //这里打印的是全局变量chessBoard[i][j]
- printf(" ");
- }
- }
- }
复制代码
|
|