gpt4 book ai didi

c - 如何通过添加指针来修复我的 C 代码?

转载 作者:行者123 更新时间:2023-11-30 20:43:17 24 4
gpt4 key购买 nike

我在下面添加了我的代码。我创建了一个 5x5 单位矩阵,但我的老师希望我们使用指针/寻址方法来显示矩阵。我不完全理解指针,并且在将其添加到我的代码中时遇到了麻烦。我了解如何创建矩阵,但不了解如何使用指针。任何帮助将不胜感激。

    #include<stdio.h>

int main() {

int i;
int j;
int ar[i][j];//initialize the array
int ptr;
*ptr = ar;
for(i = 0; i < 5; i++){
for( j=0; j<5; j++) {

//if i = j, the array will = 1
if (i == j ){
ar[i][j] = 1;
printf("%d",ar[i][j]);
}

//else it will equal 0
else {
ar[i][j] = 0;
printf("%d",ar[i][j]);
}
}
}
}

最佳答案

How can I fix my C code by adding pointers?

减去对 Identity 的函数调用的拼写错误,您的代码实际上并未损坏,因此“添加指针”无法修复任何问题。

I understood how to create the matrix, but not with the use of pointers.

你这么说,但你实际上并没有用发布的代码创建一个矩阵;您只是打印出类似于单位矩阵的模式。

..my teacher wants us to Use pointer/addressing methods to display the matrix. I don't fully understand pointers and I have been having trouble adding it to my code..

如果您的老师希望您使用指针来显示矩阵,那么您将必须实际创建一个。这可以静态或动态地完成。静态对于初学者/学生来说最有意义。你可以这样做: int matrix[5][5]

对于新手来说,理解指针通常是 C 语言中最难掌握的方面之一,所以这很正常。以前可能已经对您说过,但我会再说一遍:指针指向内存位置。您可以使用该指针获取内存位置中的值(也称为取消引用)。

例如:

int a = 10;
int * p = &a; //p points to the memory location where a is stored

/* these print the same thing */
printf("%d\n", a);
printf("%d\n", *p); //dereferencing

这与数组和矩阵有何关系?声明数组时,该数组的名称指的是数组开头的内存位置。每个连续元素都位于距开头的某个偏移处,这意味着第 n 个元素位于起始地址加 (n - 1) 处。下面是静态分配数组并分配该数组的各个内存位置的示例:

int a[10] = {0}; //an array of 10 signed integers that have been initialized to 0
printf("0x%x\n", a); //prints the beginning address of the array a

a[0] = 10; //assign the 0th element
printf("%d\n", a[0]); //prints 10

*a = 11; //this also assigns the 0th element
printf("%d\n", *a); //prints 11

a[1] = 12; //assign the 1st element
printf("%d\n", a[1]); //prints 12

*(a + 1) = 13; //this also assigns the 1st element
printf("%d\n", *(a + 1)); //prints 13

矩阵是数组的数组,但所有元素在内存中都彼此相邻,因此您可以以线性方式对元素进行寻址:beginning_address + current_row *total_number_of_columns + current_column

了解了这一点,让我们更改您的 Identity 函数:

int Identity(int * ptr, int num) { 
int row, col;

for (row = 0; row < num; row++) {
for (col = 0; col < num; col++) {
// Check if row is equal to column
if (row == col)
*(ptr + row*num + col) = 1;
else
*(ptr + row*num + col) = 0;
}
}
return 0;
}

现在它需要一个指向 int 的指针和单位矩阵的大小。要使用它,我们将向其传递一个指向矩阵开头的指针以及矩阵的大小。

像这样:

int main(){

/* this needs to match your matrix dimensions!! */
int size = 5;

/* statically allocate 5 x 5 matrix of signed integers */
int matrix[5][5] = {0};

/* modifies our matrix to make it an identity matrix */
Identity(&matrix[0][0], size); //first argument is the address of the element located in row 0, column 0

/* now go through and print elements of the matrix */
//I'm going to leave this part up to you

return 0;

}

有关 C 语言矩阵的更多信息,请查看此 tutorial

关于c - 如何通过添加指针来修复我的 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52282230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com