我试图弄清楚数组。我对单维数组和多维数组有同样的问题,当我输入值并尝试在代码中稍后返回该值时,它会返回错误的数字。
#include <stdio.h>
main ()
{
int arrayPrimary[2][2];
int x,y,a,b;
for(x=0; x<2; x++)
{
for (y=0; y<2; y++)
{
int* z;
*z==arrayPrimary[x][y];
printf("please enter a value for [%d][%d]:",x,y);
scanf("%d", &z);
}
}
for(a=0; a<2; a++)
{
for(b=0; b<2;b++)
{
printf ("The current value of [%d][%d] is:%d\n",a,b,arrayPrimary[a][b]);
}
}
return 0;
}
答案 0 :(得分:3)
这部分代码
int* z;
*z==arrayPrimary[x][y];
printf("please enter a value for [%d][%d]:",x,y);
scanf("%d", &z);
应该阅读
printf("please enter a value for [%d][%d]:",x,y);
scanf("%d", &arrayPrimary[x][y]);
您还应该考虑检查scanf
答案 1 :(得分:3)
这里有几个问题。
首先,你使用==
(比较),你打算使用=
(赋值)(这是相当具有讽刺意味的,考虑到人们反对这种错误的频率)。这意味着永远不会初始化*z
。就此而言,z
本身永远不会被初始化,因此您正在访问垃圾内存。
当您尝试将整数("%d"
)写入指针(z
)时,可能会发生错误。请记住,scanf
会指向您希望输入的位置,因此如果输入为int
,则需要将指针传递给int
。您将指向指针的指针传递给int
。
这里的指针逻辑可能是你最困惑的,所以让我们详细介绍一下:
arrayPrimary[x][y]
是一个整数,在内存中的地址与任何正常变量一样。scanf
需要知道此位置才能将值写入数组。z
作为scanf
的参数。但是,即使您将arrayPrimary[x][y]
的值复制到指向的地址z
,z仍然是与您的数组不同的变量。&z
)的内存地址与您的数组无关。当您将&z
传递给scanf
时,scanf
会查看此地址并将输入写入其中。因此,您将输入指向z
,而不是指向您的数组。试试这个:
for (y=0; y<2; y++)
{
int *z = &arrayPrimary[x][y];
printf("please enter a value for [%d][%d]:",x,y);
scanf("%d", z);
}
这样,它是这样的:
z
,指向您要更改的数据(即arrayPrimary[x][y]
)。scanf
,将输入写入z
指向的地方 - 即arrayPrimary[x][y]
。但是,不需要单独的指针。你可以写:
for (y=0; y<2; y++)
{
printf("please enter a value for [%d][%d]:",x,y);
scanf("%d", &arrayPrimary[x][y]);
}
答案 2 :(得分:0)
如果z已经是指向所需内存位置的指针,那么在scanf中使用&z
是没有意义的。只需使用z
。
(编辑:假设你在评论中指出了你的理顺。)
答案 3 :(得分:0)
用你的专栏:
int *z;
您只需设置指向int
的指针即可。在下一行:
*z==arrayPrimary[x][y];
你首先取消引用指针(*z
),所以你说'我现在想要使用该值,指针指向'。接下来,将该值与arrayPrimary[x][y]
进行比较,并放弃该比较的结果。在这里,您应该得到编译器的警告,例如“声明无效”等。所以这条线实际上什么也没做。
尝试:
int *z = &arrayPrimary[x][y];
而不是我谈到最后几行的两行。
答案 4 :(得分:0)
#include<stdio.h>
#include<iostream>
int main ()
{
int arrayPrimary[2][2];
for(int i=0; i<2; i++)
{
for (int j=0; j<2; j++)
{
printf("Please Enter value for %d%d",i,j);
scanf("%d",&arrayPrimary[i][j]);
}
}
for(int i=0; i<2; i++){
for(int j=0; j<2;j++){
printf("%d",arrayPrimary[i][j]);
printf(" ");
}
printf("\n");
}
return 0;
}