萌新,请教一个问题。

rongxin712 2018-02-05 04:27:11
问题描述:如图,看书写的代码,vs2017报错,求指教!

谢谢大神。



...全文
242 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-02-06
  • 打赏
  • 举报
回复
【code=c】将代码放在这里【/code】 以上【】用[]代替
  • 打赏
  • 举报
回复
引用 6 楼 rongxin712 的回复:
[quote=引用 3 楼 zhao4zhong1 的回复:] 仅供参考:
请问这是什么IDE ?[/quote] 应该是老赵一百年不动摇的VC6
rongxin712 2018-02-05
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
仅供参考:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int **newarr2d(int rows,int cols) {
    int **p,i;

    p=(int **)malloc(rows*sizeof(int *));
    if (NULL==p) exit(1);
    for (i=0;i<rows;i++) {
        p[i]=(int *)malloc(cols*sizeof(int));
        if (NULL==p[i]) exit(1);
    }
    return p;
}
void deletearr2d(int **p,int rows) {
    int i;

    for (i=0;i<rows;i++) {
        free(p[i]);
    }
    free(p);
}
int main() {
    int **arr2d,i,j,r,c;

    r=4;
    c=5;
    //在堆中开辟一个4×5的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    r=6;
    c=3;
    //在堆中开辟一个6×3的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    return 0;
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//  0  1  2
//  3  4  5
//  6  7  8
//  9 10 11
// 12 13 14
// 15 16 17
//
请问这是什么IDE ?
自信男孩 2018-02-05
  • 打赏
  • 举报
回复
引用 2 楼 rongxin712 的回复:
[quote=引用 1 楼 cfjtaishan 的回复:] C 语言支持变长数组,这个支持变长应该是针对二维数组的行数可变,列数需要是固定的。 因此在定义二维数组作为形参时,需要确定列数,行数可以不用指定; 形参:int matrix[nRows][nCols];等价:int (*matrix)[nCols];因此需要固定行数nCols,建议将nCols定义成一个宏。
可能是vs2017 不支持这么写?[/quote] C语言不支持完全意义的变长数组,不过在C++里是支持的。
  • 打赏
  • 举报
回复
gcc作为c代码编译是可以的,基于clang/llvm的编译器,比如C++Builder也是可以通过的。
赵4老师 2018-02-05
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int **newarr2d(int rows,int cols) {
    int **p,i;

    p=(int **)malloc(rows*sizeof(int *));
    if (NULL==p) exit(1);
    for (i=0;i<rows;i++) {
        p[i]=(int *)malloc(cols*sizeof(int));
        if (NULL==p[i]) exit(1);
    }
    return p;
}
void deletearr2d(int **p,int rows) {
    int i;

    for (i=0;i<rows;i++) {
        free(p[i]);
    }
    free(p);
}
int main() {
    int **arr2d,i,j,r,c;

    r=4;
    c=5;
    //在堆中开辟一个4×5的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    r=6;
    c=3;
    //在堆中开辟一个6×3的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    return 0;
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//  0  1  2
//  3  4  5
//  6  7  8
//  9 10 11
// 12 13 14
// 15 16 17
//
rongxin712 2018-02-05
  • 打赏
  • 举报
回复
引用 1 楼 cfjtaishan 的回复:
C 语言支持变长数组,这个支持变长应该是针对二维数组的行数可变,列数需要是固定的。
因此在定义二维数组作为形参时,需要确定列数,行数可以不用指定;
形参:int matrix[nRows][nCols];等价:int (*matrix)[nCols];因此需要固定行数nCols,建议将nCols定义成一个宏。




可能是vs2017 不支持这么写?
自信男孩 2018-02-05
  • 打赏
  • 举报
回复
C 语言支持变长数组,这个支持变长应该是针对二维数组的行数可变,列数需要是固定的。 因此在定义二维数组作为形参时,需要确定列数,行数可以不用指定; 形参:int matrix[nRows][nCols];等价:int (*matrix)[nCols];因此需要固定行数nCols,建议将nCols定义成一个宏。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧