Я попробовал два следующих фрагмента кода:
void swap_woPointer()
{
int a=5;
static int b=5;
printf("value of a : %d , value of b: %d \n", a, b);
printf("address of a: %p , address of b %p \n", &a, &b);
a++;
b++;
}
void main(int argc, char *argv[])
{
int ii;
for (ii=0; ii<10; ii++){
swap_woPointer();
}
}
и
void swap_woPointer()
{
int a;
static int b;
printf("value of a : %d , value of b: %d \n", a, b);
printf("address of a: %p , address of b %p \n", &a, &b);
a++;
b++;
}
void main(int argc, char *argv[])
{
int ii;
for (ii=0; ii<10; ii++){
swap_woPointer();
}
}
Единственное различие между двумя фрагментами кода состоит в том, что, как только я объявил только переменные a иb
int a;
static int b;
и в другом случае я определил их
int a=5;
static int b=5;
Вывод, который я получаю, отличается для двух случаев.В случае, когда я только объявил переменные, я получаю
value of a : 0 , value of b: 0
address of a: 0xffffcbbc , address of b 0x100407000
value of a : 1 , value of b: 1
address of a: 0xffffcbbc , address of b 0x100407000
value of a : 2 , value of b: 2
address of a: 0xffffcbbc , address of b 0x100407000
value of a : 3 , value of b: 3
address of a: 0xffffcbbc , address of b 0x100407000
value of a : 4 , value of b: 4
address of a: 0xffffcbbc , address of b 0x100407000
value of a : 5 , value of b: 5
address of a: 0xffffcbbc , address of b 0x100407000
value of a : 6 , value of b: 6
address of a: 0xffffcbbc , address of b 0x100407000
value of a : 7 , value of b: 7
address of a: 0xffffcbbc , address of b 0x100407000
value of a : 8 , value of b: 8
address of a: 0xffffcbbc , address of b 0x100407000
value of a : 9 , value of b: 9
address of a: 0xffffcbbc , address of b 0x100407000
, тогда как если я определяю переменные сразу, я получаю
value of a : 5 , value of b: 5
address of a: 0xffffcbbc , address of b 0x100402010
value of a : 5 , value of b: 6
address of a: 0xffffcbbc , address of b 0x100402010
value of a : 5 , value of b: 7
address of a: 0xffffcbbc , address of b 0x100402010
value of a : 5 , value of b: 8
address of a: 0xffffcbbc , address of b 0x100402010
value of a : 5 , value of b: 9
address of a: 0xffffcbbc , address of b 0x100402010
value of a : 5 , value of b: 10
address of a: 0xffffcbbc , address of b 0x100402010
value of a : 5 , value of b: 11
address of a: 0xffffcbbc , address of b 0x100402010
value of a : 5 , value of b: 12
address of a: 0xffffcbbc , address of b 0x100402010
value of a : 5 , value of b: 13
address of a: 0xffffcbbc , address of b 0x100402010
value of a : 5 , value of b: 14
address of a: 0xffffcbbc , address of b 0x100402010
Я не понимаю, откуда берется разница,Это как-то связано с распределением памяти.Я подумал, что в обоих случаях я должен получить один и тот же результат, например, переменная a, которая объявлена не статичной, должна размещаться один раз при каждом вызове функции.По-видимому, это только тот случай, когда переменная определена напрямую, а не просто объявлена.