- 论坛徽章:
- 0
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char ga[] = "abcdefg";
void fun1(char *ca)
{
printf(" &ca = %#x\t &(ca[0]) = %#x\t &(ca[1]) = %#x\n", &ca, &(ca[0]), &(ca[1]) );
}
void fun2(char pa[])
{
printf(" &pa = %#x\t &(pa[0]) = %#x\t &(pa[1]) = %#x \n", &pa, &(pa[0]), &(pa[1]) );
}
int main()
{
fun1(ga);
fun2(ga);
printf(" &ga = %#x\t &(ga[0]) = %#x\t &(ga[1]) = %#x\n", &ga, &(ga[0]), &(ga[1]) );
return 0;
}
$ ./test
&ca = 0xbfaca830 &(ca[0]) = 0x8049688 &(ca[1]) = 0x8049689
&pa = 0xbfaca830 &(pa[0]) = 0x8049688 &(pa[1]) = 0x8049689
&ga = 0x8049688 &(ga[0]) = 0x8049688 &(ga[1]) = 0x8049689
$ ./test
&ca = 0xbf93bea0 &(ca[0]) = 0x8049688 &(ca[1]) = 0x8049689
&pa = 0xbf93bea0 &(pa[0]) = 0x8049688 &(pa[1]) = 0x8049689
&ga = 0x8049688 &(ga[0]) = 0x8049688 &(ga[1]) = 0x8049689
$ ./test
&ca = 0xbfa66fc0 &(ca[0]) = 0x8049688 &(ca[1]) = 0x8049689
&pa = 0xbfa66fc0 &(pa[0]) = 0x8049688 &(pa[1]) = 0x8049689
&ga = 0x8049688 &(ga[0]) = 0x8049688 &(ga[1]) = 0x8049689
$ ./test
&ca = 0xbfba4900 &(ca[0]) = 0x8049688 &(ca[1]) = 0x8049689
&pa = 0xbfba4900 &(pa[0]) = 0x8049688 &(pa[1]) = 0x8049689
&ga = 0x8049688 &(ga[0]) = 0x8049688 &(ga[1]) = 0x8049689
$ ./test
&ca = 0xbf8cc630 &(ca[0]) = 0x8049688 &(ca[1]) = 0x8049689
&pa = 0xbf8cc630 &(pa[0]) = 0x8049688 &(pa[1]) = 0x8049689
&ga = 0x8049688 &(ga[0]) = 0x8049688 &(ga[1]) = 0x8049689
$ ./test
&ca = 0xbfe25b80 &(ca[0]) = 0x8049688 &(ca[1]) = 0x8049689
&pa = 0xbfe25b80 &(pa[0]) = 0x8049688 &(pa[1]) = 0x8049689
&ga = 0x8049688 &(ga[0]) = 0x8049688 &(ga[1]) = 0x8049689
$ ./test
&ca = 0xbf95b6c0 &(ca[0]) = 0x8049688 &(ca[1]) = 0x8049689
&pa = 0xbf95b6c0 &(pa[0]) = 0x8049688 &(pa[1]) = 0x8049689
&ga = 0x8049688 &(ga[0]) = 0x8049688 &(ga[1]) = 0x8049689
$ ./test
&ca = 0xbf81d580 &(ca[0]) = 0x8049688 &(ca[1]) = 0x8049689
&pa = 0xbf81d580 &(pa[0]) = 0x8049688 &(pa[1]) = 0x8049689
&ga = 0x8049688 &(ga[0]) = 0x8049688 &(ga[1]) = 0x8049689
1. 依照我的理解, &ca 和 &pa相等,是因为 fun1() 调用返回后,他当时所占据的堆栈内存被释放,然后又马上分配给了fun2().
所以他俩相等。
我理解的对吗?
2. ga是在data段上分配的地址,每次都相等。 但堆栈上分配的地址为什么每次都不等呢?
既然每次都不等,怎么在一个函数里的 ca 和 pa分配的地址怎么一样呢?
谢谢大家了,谁帮我解下惑。 |
|