将 C 程序转换为使用数组中的指针并具有相同的输出

Converting a C program to use pointers in array and have the same output

这是代码,我无法将其转换为使用指针并具有相同的输出:

#include <stdio.h>
int main() {
  int i, s[4], t[4], u = 0; 
  for (i=0; i<=4; i++) 
    {
      s[i] = i;
      t[i] = i;
    } 
  printf("s : t\n");
  for (i = 0; i <= 4; i++) 
  printf("%d : %d\n", s[i], t[i]);
  printf("u = %d\n", u);
 }```

The output of the code is this:

s : t
0 : 4
1 : 1
2 : 2
3 : 3
4 : 4
u = 0

我的代码如下,但是输出结果不一样,有人可以帮忙吗:


int main() {
  int i, 
    *s[4], 
    *t[4], 
    *u=0;
  for (i=0; i<=4; i++)
    {
      s[i] = &i;
      t[i] = &i;
    }
  printf("s:t\n");
  for(i=0;i<=4;i++)
    printf("%d:%d\n",*s[i],*t[i]);
printf ("u=%d\n", *u);
}

这是一种可能的解决方案,我不确定这是否是您正在寻找的解决方案:

#include <stdio.h>

int main() 
{
    int i, s[4], t[4], u=0;
    
    for (i=0; i<4; i++)
    {
      *(s+i) = i;
      *(t+i) = i;
    }
    printf("s:t\n");
    
    for(i=0; i<4; i++)
        printf("%d:%d\n",*(s+i),*(t+i));
    
    int *ptrToU = &u;
    printf ("u=%d\n", *ptrToU);
 }

C 中的数组从 0 开始索引。您的循环有 i<=4,但必须更改为 i<4 以防止出现 out-of-bounds 错误。

在您的原始代码中,您有:

int *s[4];

这将创建一个包含 4 个指向 int 的指针的数组。问题就变成了,这些指针指向什么?

您的代码:

s[i] = &i;

将每个 int 指针设置为指向变量 i 的内存位置。由于 i 并未更改其内存位置,因此 s[i] 中的每个指针都指向相同的位置。希望这对一些人有所帮助。