请问关于数组与指针区别的问题
看过一本书有如下东东:
char s1[] = "aaaaaaaaaaaaaaa ";
char *s2 = "bbbbbbbbbbbbbbbbb ";
aaaaaaaaaaa是在运行时刻赋值的;
而bbbbbbbbbbb是在编译时就确定的;
为什么???????
自编程序:
#include <stdio.h>
void main()
{
char a = 1;
char c[] = "1234567890 ";
char *p = "1234567890 ";
int i;
a = c[1];
a = p[1];
for(i=0;i <10;i++)
printf( "%c\t%d\n ",c[i],&c[i]);
puts( " ");
for(i=0;i <10;i++)
printf( "%c\t%d\n ",p[i],&p[i]);
}
运行:
1 1245040
2 1245041
3 1245042
4 1245043
5 1245044
6 1245045
7 1245046
8 1245047
9 1245048
0 1245049
1 4333604
2 4333605
3 4333606
4 4333607
5 4333608
6 4333609
7 4333610
8 4333611
9 4333612
0 4333613
Press any key to continue
以上显示c[]存放于栈区,p[]存放于全局数据区。
[解决办法]
LZ应该不是这个意思,P是指象一个常量,C++对于常量是存放在一个固定的地址空间的,如果p本身的地址当然也在man函数的栈里 你试试&p就知道了
而C是内存新申请了一块地址,也就是在main函数的栈里
[解决办法]
含义不同,存储的空间不同。
char s1[] = "aaaaaaaaaaaaaaa "; //定义一个数组,初始化为 "aaaaaaaaa ",存放在栈里,运行时分配。
char *s2 = "bbbbbbbbbbbbbbbbb "; //指针指向常量区的一段数据。存储在常量区,编译后就在常量区存在了。
[解决办法]
动态内存分配是这样的:
全局数据区:全局变量, 静态数据,常量.
栈区:为函数运行而分配的局部变量,函数参数,返回数据,返回地址等.