读书人

请教关于数组与指针区别的有关问题

发布时间: 2012-02-16 21:30:36 作者: rapoo

请问关于数组与指针区别的问题
看过一本书有如下东东:
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 "; //指针指向常量区的一段数据。存储在常量区,编译后就在常量区存在了。
[解决办法]
动态内存分配是这样的:
全局数据区:全局变量, 静态数据,常量.
栈区:为函数运行而分配的局部变量,函数参数,返回数据,返回地址等.

读书人网 >C语言

热点推荐