使用指针增加变量

mjp*_*mjp 3 c pointers

我对处理指针很新,而且我的C知识相当小.我想了解指针.我编写了以下代码来打印变量列表(a到f),如下所示:

0
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

我编写了以下代码来执行此操作:

#include <stdio.h>
int main(){
  int a,b,c,d,e,f;
  int *p;
  int i;
  a = b = c = d = f = 0;
  p = &a;
  for (i = 0; i < 5; i++){
    *p += i;
    printf("%d\n", *p);
    p++;
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个想法是通过变量和增量逐个增加数量(i).我假设你在同时初始化变量时,它们会在内存中彼此相邻.但是,我得到以下输出:

0
1
2
3
-1218283607
Run Code Online (Sandbox Code Playgroud)

如果我将for循环更改为仅从0到3(i <4),它可以正常工作,打印机0 1 2和3.但是当我希望打印变量f时,它似乎没有设置它.

正如我所说,我对指针很新,所以我可能忽略了一些愚蠢的东西,但我一直在仔细研究我的代码,试图解决它.

提前致谢.

jas*_*son 9

无法保证a, b, c, d, e并且f将在内存中相邻.如果您需要这种保证,则需要使用数组.

#include <stdio.h>
int main() {
    int a[6];
    int *p;
    int i;
    a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = 0;
    p = &a[0];
    for (i = 0; i < 6; i++){
        *p += i;
        p++;
    }
    for(i = 0; i < 6; i++) {
        printf("%d\n", a[i]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里int a[6]声明一个名为a可以容纳六个整数的数组.这六个整数可以通过获得的a[0],a[1],a[2],a[3],a[4]a[5].这样保证了a[0],a[1],a[2],a[3],a[4]a[5]在内存中连续进行奠定.这样就行了

p = &a[0];
Run Code Online (Sandbox Code Playgroud)

设置p为第一个元素的地址.此指针的每个增量都会向前移动数组中的一个位置.

第二for循环显示,第一for循环正确地设置a[i],以i用于i{0, 1, 2, 3, 4, 5}.如果你运行这个程序,你会看到

0
1
2
3 
4
5
Run Code Online (Sandbox Code Playgroud)

在控制台上.