我的任务是创建一个方阵,这个方阵需要乘以n次方,m代表方阵的大小。
用户输入的内容首先会被保存到原始数组和临时数组中。一旦计算出总和,它将被保存到结果中,然后我应该将结果数组与临时数组交换。
int main()
{
// define variables
int m, n;
int matrix_1;
int original[5][5];
int result[5][5];
int temporary[5][5];
int *ptrResult = &result[0][0];
int *ptrTemp = &temporary[0][0];
int *hold = &result[0][0];
// input from user with validations
do
{
printf("Please input an array size in between 1 to 5: ");
scanf("%d", &m);
} while (m < 1 || m > 5);
do
{
printf("Please input an integer as the multiplication power: ");
scanf("%d", &n);
} while (n <= 0);
// input for elements in array
if (m == 1)
{
printf("Value of element in matrix R with size M: ");
scanf("%d", &original[0][0]);
}
else {
for (int i = 0; i < m; i++) {
for (int k = 0; k < m; k++) {
printf("[%d][%d] = ", i, k);
scanf("%d", &original[i][k]);
temporary[i][k] = original[i][k];
}
}
}
int sum = 0;
int a;
for (int i = 1; i < n; i++) // Power nth
{
for (int c = 0; c < m; c++) // Row
{
for (int d = 0; d < m; d++) // Column
{
for (int k = 0; k < m; k++)
{
sum += temporary[c][k] * original[k][d];
}
result[c][d] = sum;
sum = 0;
}
*hold = *(ptrResult + d);
*(ptrResult + d) = *(ptrTemp + d);
*(ptrTemp +d) = *hold;
}
}
我对指针的基础知识很差,因为它对我来说是一个非常新的概念。
我想要做的是每次我的循环计算总和之一时我想将其从结果数组替换到临时数组中。忘了说这个原始矩阵实际上是一个 5x5 矩阵,但假设用户想要 m =3,它只填充 5x5 矩阵内的 3x3 矩阵。
最佳答案
我不太清楚你想做什么。但是您的代码有一些问题/似乎有问题。
代码无法编译,因为变量 d
的使用超出了范围。
for (int d = 0; d < m; d++) // Here d is defined, i.e. in scope
{
for (int k = 0; k < m; k++)
{
sum += temporary[c][k] * original[k][d];
}
result[c][d] = sum;
sum = 0;
} // Here d gets out of scope
*hold = *(ptrResult + d); // So d can't be used here and
// you'll get a compile error
原则上,您的交换代码是可以的,因为它确实交换了两个值。
*hold = *(ptrResult + d); // Put X into temp
*(ptrResult + d) = *(ptrTemp + d); // Overwrite X with Y
*(ptrTemp +d) = *hold; // Overwrite Y with X
// So X and Y has been swapped
但是请看一下您的 hold
指针。它指向什么?
int *hold = &result[0][0];
它指向结果
中的第一个元素。因此,每当进行交换时,都会破坏 result
的第一个元素。这可能不是你想要的。相反,创建另一个变量进行交换。喜欢:
int temp;
int* hold = & temp;
但是,总的来说,我不明白为什么你想用指针来做到这一点。为什么不使用简单的 array[x][y]
形式。
关于c - 如何使用指针交换数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43013365/