【发布时间】:2020-03-19 06:33:23
【问题描述】:
我为 C 和 C++ 尝试了相同的程序,即将二维数组传递给函数。 以下程序在 C 中运行, 但不能在 C++ 中工作, 请解释为什么会这样?
在 C
#include<stdio.h>
void pass(int n, int arr[][n]) // or void pass(int n, int (*arr)[n])
{
printf("%d",arr[0][0]);
//.....
}
int main()
{
int n;
scanf("%d",&n);
int arr[n][n];
arr[0][0]=0;
pass(n,arr);
return 0;
}
在 C++ 中
#include <bits/stdc++.h>
using namespace std;
void pass(int n, int arr[][n]) // or void pass(int n, int (*arr)[n])
{
cout << arr[0][0];
//.....
}
int main()
{
int n;
cin >> n;
int arr[n][n];
arr[0][0]=0;
pass(n,arr);
return 0;
}
3:29:error: 在 ']' 标记之前使用函数体外部的参数 void pass(int n, int arr[][n]) // 或者 void pass(int n, int (*arr)[n])
6:9:error: 'arr' 未在此范围内声明 cout
【问题讨论】:
-
这不应该太令人惊讶,c 和 c++ 是不同的语言。该代码也不会编译为 fortran
-
C++ 不是 C 的超集。C 中有些东西不是有效的 C++(例如问题中的 VLA); C 中有些东西在 C++ 中有不同的含义(例如,
sizeof '$'在 C 中表示sizeof (int),但在 C++ 中表示sizeof (char))。
标签: c++ c arrays syntax variable-length-array