| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8581 人关注过本帖
标题:[讨论]char* a = "abc" 和 char a[] = "abc" 之间的区别 ...
取消只看楼主 加入收藏
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
 问题点数:0 回复次数:12 
[讨论]char* a = "abc" 和 char a[] = "abc" 之间的区别
如题:
我是这样理解的,大家看对不对
1、char* a = "abc"; 声明了一个字符类型的指针a,并为它赋值初始值为"zhf"其中字符串"zhf"应属于全局静态存储区,这里对a[1] = 'k',在编程中会出错,高手解释一下为什么?这里 a = null,可以,容易理解,因为a是指针类型。
2、char a[] = "abc"; 声明了一个字符型数组,并赋初值。这里的字符串"zhf"应该是属于堆存储区,是在局部开辟的空间。所以,这里对a[1] = 'k';是正确的。由于数组类型a相当于一个const型的指针,所以a = null;会出错。
欢迎高手纠正、补充。
搜索更多相关主题的帖子: abc char 
2007-09-19 20:47
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
如果字符串是这样声明的:char *a="abc",然后a[1]='k'会有发生运行错误,而如果字符串这样声明:char a[]="abc",a[1]='k'却无错误?

[此贴子已经被作者于2007-9-19 21:10:09编辑过]


英者自知,雄者自胜
2007-09-19 21:08
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

我觉得这样声明没问题: char *a="abc",a代表一个字符串"abc"的的首地址,a[1]代表该字符串的第2个字符也就是字符'b',a[1]相当于*(a+1)

[此贴子已经被作者于2007-9-19 21:45:29编辑过]


英者自知,雄者自胜
2007-09-19 21:44
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
按楼上改了一下还是有错!

英者自知,雄者自胜
2007-09-19 21:52
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

大家别跑题呀!

[此贴子已经被作者于2007-9-19 22:03:09编辑过]


英者自知,雄者自胜
2007-09-19 22:02
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
哦,我明白了char *a="abc"编译器会默认为const char* a="abc",把a当成指向常量字符串的指针,a指向的内容不可以改变,但a本身的值可以改变

英者自知,雄者自胜
2007-09-19 22:13
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

在谭浩强的那本C程序设计第2版的236页上的那个程序也不能运行,估计就是这个原因,一运行就出现运用程序错误的提示,我贴上来,不妨大家也试试看能不能运行

#include<stdio.h>
void copy_string(char *from,char *to)
{
for(;*from != '\0';from++,to++)
*to=*from;
*to='\n';
}
int main(void)
{
char *a = "I am a teacher.";
char b[] = "you are a student";
printf("\nstring a=%s\nstring b=%s\n",a,b);
copy_string(b,a);
printf("\nstring a=%s\nstring b=%s\n",a,b);
}


英者自知,雄者自胜
2007-09-19 22:28
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

按楼上改了下,程序运行正常。。。
感觉对c/c++内存分配机制有点迷糊


英者自知,雄者自胜
2007-09-19 22:58
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
内存管理模式中关于平时我们说的堆和栈有什么区别?一般情况下用哪个比较好...

英者自知,雄者自胜
2007-09-20 12:26
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

楼上的版主能不能给我讲一下堆和栈的区别?堆分配和栈分配的最大不同点是什么?


英者自知,雄者自胜
2007-09-20 16:38
快速回复:[讨论]char* a = "abc" 和 char a[] = "abc" 之间的区别 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012731 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved