社区
C语言
帖子详情
请问字符串指针和一维数组的区别在哪里?
gglovelxt
2007-04-04 07:33:48
char *a="abcdefg";
和
char a[]="abcdefg";
他们分别是怎样存储的?
编了一个程序,是更改abcdefghi的顺序的~~用上面的就出现错误~~下面就没问题~~
请高手赐教
...全文
392
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
打赏
举报
回复
上面的解释得很全面,接分来了。
C语言教学课件:14-3_
指针
数组(用于处理二维数组或多个
字符串
).ppt
C语言教学课件:14-3_
指针
数组(用于处理二维数组或多个
字符串
).ppt
大一c语言数组实验心得.docx
大一c语言数组实验心得.docx
【C语言编程】
字符串
处理与数组操作:
字符串
替换、分割及数组
指针
应用实例分析
内容概要:本文档主要展示了C语言中关于
字符串
操作、内存分配与释放、数组与
指针
的应用等多个方面的编程技巧和示例代码。文档首先通过编写函数`replaceSubstr`实现了
字符串
中指定子串的替换功能,并通过测试用例验证了函数的正确性。接着介绍了如何将一个由特定字符分隔的
字符串
分割成多个子串,并存储到二维字符数组中,通过`spitString`和`spitString2`两个版本的实现进行了详细说明。此外,文档还深入探讨了数组与
指针
的关系,包括
一维数组
、多维数组作为函数参数传递时的行为差异,以及如何利用`typedef`定义数组类型来简化代码书写。最后,通过一系列示例演示了不同类型的数组
指针
定义方式及其应用。 适合人群:具有C语言基础,希望深入理解
字符串
处理、内存管理、数组与
指针
关系的程序员或计算机专业学生。 使用场景及目标:①学习如何实现高效的
字符串
替换算法;②掌握动态内存分配与安全释放的方法;③理解数组作为函数参数传递时的退化机制;④熟练掌握不同类型数组
指针
的定义与使用方法。 阅读建议:由于文中涉及较多底层概念和细节操作,建议读者结合实际编程环境进行代码调试与实践,同时注意理解每段代码背后的原理,特别是关于内存管理和
指针
运算部分的内容。
C语言程序设计数组
字符串
指针
PPT学习教案.pptx
C语言程序设计数组
字符串
指针
PPT学习教案.pptx
C语言:数组、
指针
与
字符串
(简易入门、精髓)
数组例程详解
指针
例程详解
字符串
例程详解 PPT详细描述数组、
指针
和
字符串
在C程序中的应用
C语言
70,037
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章