我对处理指针很新,而且我的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时,它似乎没有设置它.
正如我所说,我对指针很新,所以我可能忽略了一些愚蠢的东西,但我一直在仔细研究我的代码,试图解决它.
提前致谢.
无法保证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)
在控制台上.