打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
数组和指针的区别
 发信人:   RoachCock  (chen3feng),   信区:  CPlusPlus              
标     题:  [FAQ]数组与指针有什么区别?  
发信站:   BBS   水木清华站  (Tue   Jan  14   16:12:01   2003),  站内  
 
[数组和指针的分配]  
 
数组是开辟一块连续的内存空间,数组本身的标示符代表整个数组,可以用sizeof取得真 
实的大小  
 
指针则是只分配一个指针大小的内存,并可把它的值指向某个有效的内存空间 
 
[空间的分配]  
 
[全局的和静态的]  
char   *p= "hello ";  
一个指针,指向只读数据块(section)里的 "hello",可被编译器放入字符串池(也就是说,  
你在写一个char   *q= "hello ",可能和p共享数据) 
 
char   a[]= "hello ";  
一个数组,分配在可写数据块(section),不会被放到字符串池中 
 
[局部]  
char   *p= "hello ";  
一个指针,指向只读数据块(section)里的 "hello",可被编译器放入字符串池(也就是说,  
你在写一个char   *q= "hello",可能和p共享数据),另外,在函数中可以返回它的地址,也就 
是说,指针是局部变量,他指向的数据却是全局的. 
 
char   a[]= "hello ";  
一个数组,分配在堆栈上,初始化由编译器进行(短的话直接用指令填充,长的就从全局字 
符串表拷贝),不会被放到字符串池中(但是却可能从字符串池中拷贝过来),也不应该返回 
它的地址.  
 
[代码中的字面字符串]  
printf( "%s\n ", "hello ");  
这两个字面常量( "%s\n "和 "hello "),都在只读数据块里 
 
[用途]  
1.全局指针  
用于不需要修改内容,却可能会修改指针的情况(当然,不修改也没人反对) 
 
2.全局数组,用于不需要修改地址,却需要修改内容的场合 
 
3.既需要修改指针,有需要修改内容怎么办呢?定义一个数组,在定义一个指针指向它就可 
以了  
 
4.函数中如果不需要修改字符串的内容,应该尽量用char*p= "xxx"这种写法.初始化的局  
部字符数组影响效率,一般应该尽量避开(应该使用的情况下则不要犹豫) 
 
以上说的是VC6的情况,  其他编译器也可以据此推测,  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
从一道面试题看数组和指针
c语言中的字符类型指针赋值字符串常量
c语言函数内存分配
问题详情
深入 char * ,char ** ,char a[ ] ,char *a[] 内核
C语言知识总结,你还有哪块知识不懂吗(上)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服