社区
C语言
帖子详情
请问字符串指针和一维数组的区别在哪里?
gglovelxt
2007-04-04 07:33:48
char *a="abcdefg";
和
char a[]="abcdefg";
他们分别是怎样存储的?
编了一个程序,是更改abcdefghi的顺序的~~用上面的就出现错误~~下面就没问题~~
请高手赐教
...全文
375
17
打赏
收藏
请问字符串指针和一维数组的区别在哪里?
char *a="abcdefg"; 和 char a[]="abcdefg"; 他们分别是怎样存储的? 编了一个程序,是更改abcdefghi的顺序的~~用上面的就出现错误~~下面就没问题~~ 请高手赐教
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
上面的解释得很全面,接分来了。
fortran
指针
应用
指针
的概念
指针
变量
指针
与数组
指针
的算术运算 行
指针
与列
指针
练习1 二维数组的
指针
变量 指向
一维数组
的
指针
变量
指针
与
字符串
返回
指针
值的函数
指针
数组 练习2
C语言二维数组几种常用的表示方法
(2)、第二种是用
一维数组
来表示二维数组,从显示的元素地址可以看出,二维数组和
一维数组
表示的二维数组在内存中的储存方式其实是一样的,不过使用二维数组看起来要简单些,只要不用进行地址转换。 (3)、第三...
《c语言深度解析》第5、6章 制作c库与c标准库、数组与
字符串
课程内容: 第5章: 库的原理、静态库与动态库、制作静态库和动态库、c库函数与OS ... 第6章:
一维数组
、二维数组、三维数组、使用malloc开辟多维数组、
字符串
、
指针
变量/数组/
字符串
与sizeof、main函数的argc、argv。
第9章
指针
和数组-4
指针
数组及其应用 - 用
指针
数组表示多个
字符串
1
第9章
指针
和数组—
指针
数组及其在
字符串
处理中的应用C语言程序设计第9章
指针
和数组问题:存储一个
字符串
集合的最佳方式是什么?二维的字符数组问题的提出105C语
四种方法对
字符串
排序
方法一:用二维数组做函数参数; 方法二:用指向
一维数组
的
指针
做函数参数; 方法三:用string数组; 方法四:(即第12题)用
指针
数组做函数参数,
字符串
不等长。
C语言
69,373
社区成员
243,079
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章