首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-16 
请问关于数组与指针区别的问题看过一本书有如下东东:chars1[]aaaaaaaaaaaaaaa char*s2bbbbbbbbbbbbb

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

热点排行