社区
C语言
帖子详情
请问字符串指针和一维数组的区别在哪里?
gglovelxt
2007-04-04 07:33:48
char *a="abcdefg";
和
char a[]="abcdefg";
他们分别是怎样存储的?
编了一个程序,是更改abcdefghi的顺序的~~用上面的就出现错误~~下面就没问题~~
请高手赐教
...全文
378
17
打赏
收藏
请问字符串指针和一维数组的区别在哪里?
char *a="abcdefg"; 和 char a[]="abcdefg"; 他们分别是怎样存储的? 编了一个程序,是更改abcdefghi的顺序的~~用上面的就出现错误~~下面就没问题~~ 请高手赐教
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
零度方向
2011-08-23
打赏
举报
回复
瞌睡虫是下一个盖茨!
Eleve
2007-10-09
打赏
举报
回复
学习,mark一个
xlbdan
2007-04-05
打赏
举报
回复
char *a="abcdefg";
和
char a[]="abcdefg";
他们分别是怎样存储的?
编了一个程序,是更改abcdefghi的顺序的~~用上面的就出现错误~~下面就没问题~~
请高手赐教
char *a="abcdefg"是一个字符串常量,"abcdefg",8个字节,因为最后还有一个'\0',a是指向这个常量的首地址的指针. "abcdefg"是常量,也就是说,它是永远不可以被修改的.所以你用这种存储方式来更改abcdefghi的顺序当然是不行的,因为char *a="abcdefghi"之后,abcdefghi就是一个永远不能变的量,不可能被修改
char a[]="abcdefg"这是做为一个数组来存放.你可以理解为a[0]=a...a[7]='\0'这样子,它们是分离开的,也就是说,"abcdefg"这个字符串是可以修改的,并不是常量,它只是和其它数组一样而已.因此利用这种存储方式来修改你的abcdefghi的顺序当然是可以的!
awl005
2007-04-05
打赏
举报
回复
上面的解释都很详细了
补充一下
char *a="abcdefg"; //a指向的空间里实际存放的是"abcdefg\0"长度是8
char a[]="abcdefg"; //这个数组里实际存放的就是"abcdefg"长度是7,由于没有\0,以char*访问时就会越界
spofmy
2007-04-05
打赏
举报
回复
学习
orc1984
2007-04-04
打赏
举报
回复
總的來說對於訪問內存來說 區別不大
但数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。
指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。
iu_81
2007-04-04
打赏
举报
回复
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。
指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。
CathySun118
2007-04-04
打赏
举报
回复
jixingzhong(瞌睡虫·星辰)解释的很清楚
bargio_susie
2007-04-04
打赏
举报
回复
虫子解释得够详细,起得够早的。
我们只有接分了。
jixingzhong
2007-04-04
打赏
举报
回复
关键就是 指针指向的是一个常量,
它没有把常量的内容拷贝出来,
所以只能读,不能写
数组 则是把这个常量字符串复制了一份到自己的空间中,
所以可读可写,
实际上已经和原来的 常量字符串 没有关系了 ~
jixingzhong
2007-04-04
打赏
举报
回复
char *a="abcdefg";
在 常量区有一个字符串 "abcdefg" ,
然后定义一个指针 a, 指针的内容为这个常量字符串的首地址。
注意,这里只是一个指针指向了 常量字符串,
所以你不能对字符串进行修改,
例如 a[i]='?' 这样的操作会出错,
但是你可以修改a:char b[10]=""; a=b; //a指向数组b首地址, OK
char a[]="abcdefg";
定义了一个数组 a ,
把 字符串"abcdefg" 【这个字符串本身在常量区】拷贝到数组中来。
这样,你可以修改 数组元素,a[i]='?' //OK
但是你不能修改数组名字地址: a=b //error !!
wangzhangyong411
2007-04-04
打赏
举报
回复
如果是LZ的这道题目,那当然是虫子的解释很合理的,就是数据是存在一个静态区域里的,你可以查看高质量C++编程这本书,关于内存的分布 这本书讲得比较贴切
wangzhangyong411
2007-04-04
打赏
举报
回复
其实确切的还不够详细,在一个CPP文件中定义char a[] = "adsf";然后在另一个CPP中声明extern char *a; 这样的话你们有试过吗,然后调用prinf 看看能否成功,或者反着看一下,定义成指针 声明成数组 其实指针跟数组的差别主要都是看编译器的,在存储上其实总的来说没很大区别,在<C专家编程>里讲得很详细
grieved
2007-04-04
打赏
举报
回复
虫子太牛了。学习
cjchenxi
2007-04-04
打赏
举报
回复
学习
yzcurry
2007-04-04
打赏
举报
回复
我来了
luora
2007-04-04
打赏
举报
回复
上面的解释得很全面,接分来了。
C语言教学课件:14-3_
指针
数组(用于处理二维数组或多个
字符串
).ppt
C语言教学课件:14-3_
指针
数组(用于处理二维数组或多个
字符串
).ppt
大一c语言数组实验心得.docx
大一c语言数组实验心得.docx
C语言程序设计数组
字符串
指针
PPT学习教案.pptx
C语言程序设计数组
字符串
指针
PPT学习教案.pptx
C语言:数组、
指针
与
字符串
(简易入门、精髓)
数组例程详解
指针
例程详解
字符串
例程详解 PPT详细描述数组、
指针
和
字符串
在C程序中的应用
C语言程序设计数组
字符串
指针
实用教案.ppt
C语言程序设计数组
字符串
指针
实用教案.ppt
C语言
70,022
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章