C 返回数组
我尝试使用以下代码添加两个矩阵:C 返回数组,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,我尝试使用以下代码添加两个矩阵: #include <stdio.h> int matrix (void) { int a[2][2]; int b[2][2]; int c[2][2]; int i, j; for (i = 0; i < 2; ++i) { for (j = 0; j < 2; ++j) {
#include <stdio.h>
int matrix (void)
{
int a[2][2];
int b[2][2];
int c[2][2];
int i, j;
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
scanf("%d", &b[i][j]);
}
}
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
c[i][j] = a[i][j] + b[i][j];
}
}
return c;
}
int main ()
{
int i, j;
int c[2][2];
c = matrix();
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
printf("%d", c[i][j]);
}
printf("\n");
}
return 0;
}
return [i][j]
一方面,您让
矩阵
返回一个int
s的本地数组,但声明它返回一个int
值。一方面,您让矩阵
返回一个int
s的本地数组,但是声明它返回一个int
值。以下内容不会打印该值:
printf("%d", &c[i][j]);
return [i][j]
但是一些指针(如果编译的话)。你必须做到:
printf("%d", c[i][j]);
return [i][j]
以下内容不会打印该值:
printf("%d", &c[i][j]);
return [i][j]
但是一些指针(如果编译的话)。你必须做到:
printf("%d", c[i][j]);
return [i][j]
你想怎么修就怎么修
#include <stdio.h>
int (*matrix(void))[2]{//return pointer as int (*)[2]
static int c[2][2];//Can not be used to return the automatic local variables.
int a[2][2];
int b[2][2];
int i, j;
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
scanf("%d", &b[i][j]);
}
}
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
c[i][j] = a[i][j] + b[i][j];
}
}
return c;
}
int main (){
int i, j;
int (*c)[2];
c = matrix();
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
printf("%d ", c[i][j]);//remove &
}
printf("\n");
}
return 0;
}
return [i][j]
#包括
int(*矩阵(void))[2]{//返回指针作为int(*)[2]
static int c[2][2];//不能用于返回自动局部变量。
INTA[2][2];
int b[2][2];
int i,j;
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&a[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&b[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
c[i][j]=a[i][j]+b[i][j];
}
}
返回c;
}
int main(){
int i,j;
int(*c)[2];
c=矩阵();
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
printf(“%d”,c[i][j]);//删除&
}
printf(“\n”);
}
返回0;
}
根据需要进行修复
#include <stdio.h>
int (*matrix(void))[2]{//return pointer as int (*)[2]
static int c[2][2];//Can not be used to return the automatic local variables.
int a[2][2];
int b[2][2];
int i, j;
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
scanf("%d", &b[i][j]);
}
}
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
c[i][j] = a[i][j] + b[i][j];
}
}
return c;
}
int main (){
int i, j;
int (*c)[2];
c = matrix();
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
printf("%d ", c[i][j]);//remove &
}
printf("\n");
}
return 0;
}
return [i][j]
#包括
int(*矩阵(void))[2]{//返回指针作为int(*)[2]
static int c[2][2];//不能用于返回自动局部变量。
INTA[2][2];
int b[2][2];
int i,j;
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&a[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&b[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
c[i][j]=a[i][j]+b[i][j];
}
}
返回c;
}
int main(){
int i,j;
int(*c)[2];
c=矩阵();
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
printf(“%d”,c[i][j]);//删除&
}
printf(“\n”);
}
返回0;
}
尝试此固定代码:
#include <stdio.h>
void matrix (int c[][2]) //Fix 1
{
int a[2][2];
int b[2][2];
int i, j;
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
scanf("%d", &b[i][j]);
}
}
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
c[i][j] = a[i][j] + b[i][j];
}
}
}
int main ()
{
int i, j;
int c[2][2];
matrix(c); //Fix 2
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
printf("%d\t", c[i][j]); //Fix 3
}
printf("\n");
}
return 0;
}
return [i][j]
#包括
void矩阵(int c[][2])//修复1
{
INTA[2][2];
int b[2][2];
int i,j;
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&a[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&b[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
c[i][j]=a[i][j]+b[i][j];
}
}
}
int main()
{
int i,j;
INTC[2][2];
矩阵(c);//固定2
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
printf(“%d\t”,c[i][j]);//修复3
}
printf(“\n”);
}
返回0;
}
尝试此固定代码:
#include <stdio.h>
void matrix (int c[][2]) //Fix 1
{
int a[2][2];
int b[2][2];
int i, j;
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
scanf("%d", &b[i][j]);
}
}
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
c[i][j] = a[i][j] + b[i][j];
}
}
}
int main ()
{
int i, j;
int c[2][2];
matrix(c); //Fix 2
for (i = 0; i < 2; ++i) {
for (j = 0; j < 2; ++j) {
printf("%d\t", c[i][j]); //Fix 3
}
printf("\n");
}
return 0;
}
return [i][j]
#包括
void矩阵(int c[][2])//修复1
{
INTA[2][2];
int b[2][2];
int i,j;
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&a[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
scanf(“%d”、&b[i][j]);
}
}
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
c[i][j]=a[i][j]+b[i][j];
}
}
}
int main()
{
int i,j;
INTC[2][2];
矩阵(c);//固定2
对于(i=0;i<2;++i){
对于(j=0;j<2;++j){
printf(“%d\t”,c[i][j]);//修复3
}
printf(“\n”);
}
返回0;
}
您正在使用返回c返回2D数组,返回c只能用于返回数据类型不是1D或2D数组的变量。要解决此问题,需要返回2D数组,即
return [i][j]
另外,您已经将c声明为2D数组,但在返回时将其用作变量
return [i][j]
int c[2][2];
c = matrix();
要修复它,请使用
return [i][j]
c[i][j]= matrix();
或者声明c为
return [i][j]
int c;
您正在使用返回c返回2D数组,返回c只能用于返回数据类型不是1D或2D数组的变量。要解决此问题,需要返回2D数组,即
return [i][j]
另外,您已经将c声明为2D数组,但在返回时将其用作变量
return [i][j]
int c[2][2];
c = matrix();
要修复它,请使用
return [i][j]
c[i][j]= matrix();
或者声明c为
return [i][j]
int c;
这些错误是什么?它是哪种编译器?你会事先收到很多警告:-主要是在将指针视为整数时。这不是一个编译错误--更糟糕。这是一只虫子。每当您尝试打印数组的内容时,都会执行如下操作:
printf(“%d”、&c[i][j])代码>删除操作员的地址(&
)。您想要打印存储在c[i][j]
中的内容,而不是c[i][j]
的地址。主要问题是函数在返回矩阵时返回int。这是我发现的唯一编译错误。还有其他警告。除此之外,还有语义错误。这些错误是什么?它是哪种编译器?你会得到很多警告:-主要是将指针视为整数。这不是一个编译错误--更糟糕。这是一只虫子。每当您尝试打印数组的内容时,都会执行如下操作:printf(“%d”、&c[i][j])代码>删除操作员的地址(&
)。您想要打印存储在c[i][j]
中的内容,而不是c[i][j]
的地址。主要问题是函数在返回矩阵时返回int。这是我发现的唯一编译错误。还有其他警告。除此之外,还有语义错误。@RudyVelthuis我尊重原文。这样的人更喜欢对OP说。他们似乎是一个自鸣得意的观点。唉。。一个自鸣得意的断言被重复。请理解每一件事情所需要的时间和条件是不同的。需要改变的是什么