int main()
{
float a[5] = {0};
float* b = a;
for (int i = 0; i < 5; i++)
{
*++b = i;
printf("%f %f\n", a[i], *b);
}
return 0;
}
1.为啥两种打印方式出来的结果不一致,我想不通a[i]为啥会有两个0,*b不就是取的a地址的值吗,怎么还对不上
2.这个警告是啥,也没报错,也没阻止代码运行,就是每次都弹出来
int main()
{
int a[5] = {0};
int* b = a;
for (int i = 0; i < 5;i++ )
{
*b++ = i;
printf("%d %d\n", a[i], *b + i);
}
printf("\n%p\n", a);
return 0;
}
3.两段代码除类型外都一致,为啥float不需要+i就能完整打印数组,而int+i还最后一位溢出呢(不+i打印不出来)
4.这个地址不应该是固定的吗,为什么我打印一次就会变一次
供参考:
#include <stdio.h>
int main()
{
float a[5] = {0};
float* b = a;
for (int i = 0; i < 5; i++)
{
*b++ = i; //*++b = i; ++在前,指针 b 相当于 b=b+1 ==>a[1]了,此时 a[1] = i=0
printf("%f %f\n", a[i], *(b-1));//打印时,前一句 b++ , b指向了a[1]了,所以这里改成*(b-1)
}
return 0;
}
//0.000000 0.000000
//1.000000 1.000000
//2.000000 2.000000
//3.000000 3.000000
//4.000000 4.000000
//请按任意键继续. . .
#include <stdio.h>
int main()
{
int a[5] = {0};
int* b = a;
for (int i = 0; i < 5;i++ )
{
*b++ = i;
printf("%d %d\n", a[i], *(b - 1)); //printf("%d %d\n", a[i], *b + i);
}
printf("\n%p\n", a);
return 0;
}
//0 0
//1 1
//2 2
//3 3
//4 4
//0019FF24
//请按任意键继续. . .
//4.这个地址不是固定的,代码运行一次,给数组 a[5]分配的内存地址不一定都是同一处。