C语言生成矩阵
Generating matrix in C language
我无法解决简单的任务来生成给定大小的矩阵。我收到太多无法理解的错误,例如:C2087、C2131 或 C2447 (Microsoft Visual Studio)
如果可以请帮帮我
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iomanip>
int max = 100;
void random(int & size, int M[][])
{ for (int i = 0; i < size; i++)
{ for (int j = 0; j < size; j++)
{
M[i][j] = rand() % 9;
}
}
}
void display(int size, int M[][])
{ for (int i = 0; i < size; i++)
{ for (int j = 0; j < size; j++)
{
printf("%d", &M[i][j]);
}
}
}
int main()
{
printf("give me matrix size\n");
int size;
scanf_s("%d", &size);
//int* M = new int[size][size];
int M[max][max];
random(size, M);
display(size, M);
return 0;
}
您在 c 中处理数组的方式存在问题。数组实际上并不是作为数组传递的,而是作为指针传递的。
考虑这个例子
void print_arr (int array[], int length);
void print_arr (int * array, int length);
void print_arr (int array[10], int length);
void print_arr (int array[11], int length);
这四个函数,对于c来说,都是一样的。当您将数组作为函数参数传递时,您实际上只是在传递一个指针。它工作正常,因为您可以访问指针的索引。当你写
int function (int array[]) {
return array[3];
}
C 将获取数组的地址,添加 (3 * sizeof(int))
和 return 该值。它可以这样做是因为它知道数组的每个元素的大小为 int
.
问题是你不能在c中传递二维数组。当你写
void function (int array[][]) {
array[2][3];
}
C会先计算第一个索引。问题是它不知道偏移数组的大小。如果您的阵列是 4 x 4 怎么办?如果是 7 x 9 呢?每个可能的大小都需要不同的偏移量,c 不知道是哪个。
有几个选项。要么把大小写在ahead-of-time里,像这样:
int function (int array[10][10]) {
return array[2][3];
}
这会告诉 c 数组的大小,并让它正确计算偏移量。
或者,如果您提前不知道尺寸,请手动将信息传入,如下所示:
int function (int * array, int width) {
int index = (2 * width) + 3;
return array[index];
}
在此示例中,您基本上是在手动执行 c 通常为您执行的数学运算。
谢谢卡森。所以我试图通过制作长数组来制作矩阵。我认为我的指针仍然有问题。
我的错误:
错误 C2540 non-constant 表达式作为数组绑定行 30
错误 C2440 'initializing': 无法从 'int (*)[1]' 转换为 'int *' 第 30 行
错误 C2664 'void random(int,int *)': 无法将参数 2 从 'int' 转换为 'int *' 第 32 行
错误 C2664 'void wypisz(int,int *)': 无法将参数 2 从 'int' 转换为 'int *' 第 33 行
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void random(int size, int * M)
{
for (int i = 0; i < size^2; i++)
{
int x = rand() % 9;
M[i] = x;
}
}
void display(int size, int *M)
{
for (int i = 0; i < size^2; i++)
{
printf("%d ", &M[i]);
if(size%i==0)
printf("\n");
}
}
int main()
{
printf("Gimme size: \n");
int size;
scanf_s("%d", &size);
int* M = new int[size][size];
random(size, *M);
display(size, *M);
return 0;
}
我无法解决简单的任务来生成给定大小的矩阵。我收到太多无法理解的错误,例如:C2087、C2131 或 C2447 (Microsoft Visual Studio) 如果可以请帮帮我
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iomanip>
int max = 100;
void random(int & size, int M[][])
{ for (int i = 0; i < size; i++)
{ for (int j = 0; j < size; j++)
{
M[i][j] = rand() % 9;
}
}
}
void display(int size, int M[][])
{ for (int i = 0; i < size; i++)
{ for (int j = 0; j < size; j++)
{
printf("%d", &M[i][j]);
}
}
}
int main()
{
printf("give me matrix size\n");
int size;
scanf_s("%d", &size);
//int* M = new int[size][size];
int M[max][max];
random(size, M);
display(size, M);
return 0;
}
您在 c 中处理数组的方式存在问题。数组实际上并不是作为数组传递的,而是作为指针传递的。
考虑这个例子
void print_arr (int array[], int length);
void print_arr (int * array, int length);
void print_arr (int array[10], int length);
void print_arr (int array[11], int length);
这四个函数,对于c来说,都是一样的。当您将数组作为函数参数传递时,您实际上只是在传递一个指针。它工作正常,因为您可以访问指针的索引。当你写
int function (int array[]) {
return array[3];
}
C 将获取数组的地址,添加 (3 * sizeof(int))
和 return 该值。它可以这样做是因为它知道数组的每个元素的大小为 int
.
问题是你不能在c中传递二维数组。当你写
void function (int array[][]) {
array[2][3];
}
C会先计算第一个索引。问题是它不知道偏移数组的大小。如果您的阵列是 4 x 4 怎么办?如果是 7 x 9 呢?每个可能的大小都需要不同的偏移量,c 不知道是哪个。
有几个选项。要么把大小写在ahead-of-time里,像这样:
int function (int array[10][10]) {
return array[2][3];
}
这会告诉 c 数组的大小,并让它正确计算偏移量。
或者,如果您提前不知道尺寸,请手动将信息传入,如下所示:
int function (int * array, int width) {
int index = (2 * width) + 3;
return array[index];
}
在此示例中,您基本上是在手动执行 c 通常为您执行的数学运算。
谢谢卡森。所以我试图通过制作长数组来制作矩阵。我认为我的指针仍然有问题。
我的错误: 错误 C2540 non-constant 表达式作为数组绑定行 30
错误 C2440 'initializing': 无法从 'int (*)[1]' 转换为 'int *' 第 30 行
错误 C2664 'void random(int,int *)': 无法将参数 2 从 'int' 转换为 'int *' 第 32 行
错误 C2664 'void wypisz(int,int *)': 无法将参数 2 从 'int' 转换为 'int *' 第 33 行
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void random(int size, int * M)
{
for (int i = 0; i < size^2; i++)
{
int x = rand() % 9;
M[i] = x;
}
}
void display(int size, int *M)
{
for (int i = 0; i < size^2; i++)
{
printf("%d ", &M[i]);
if(size%i==0)
printf("\n");
}
}
int main()
{
printf("Gimme size: \n");
int size;
scanf_s("%d", &size);
int* M = new int[size][size];
random(size, *M);
display(size, *M);
return 0;
}