社区
C语言
帖子详情
请问字符串指针和一维数组的区别在哪里?
gglovelxt
2007-04-04 07:33:48
char *a="abcdefg";
和
char a[]="abcdefg";
他们分别是怎样存储的?
编了一个程序,是更改abcdefghi的顺序的~~用上面的就出现错误~~下面就没问题~~
请高手赐教
...全文
383
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语言中,
指针
数组是一种重要的数据结构,广泛应用于
字符串
处理、矩阵运算和动态存储管理等领域。本文将详细介绍
指针
数组的定义、使用和应用。 一、
指针
数组的定义
指针
数组是一种特殊的数组,它的元素是
指针
。...
大一c语言数组实验心得.docx
本文档主要介绍了 C 语言数组的实验心得,包括
一维数组
和二维数组的定义、赋值和输入输出的方法,字符数组和
字符串
函数的使用,以及与数组有关的算法特别是排序算法。通过实验和实践,掌握了数组的使用方法,并对...
【C语言编程】
字符串
处理与数组操作:
字符串
替换、分割及数组
指针
应用实例分析
此外,文档还深入探讨了数组与
指针
的关系,包括
一维数组
、多维数组作为函数参数传递时的行为差异,以及如何利用`typedef`定义数组类型来简化代码书写。最后,通过一系列示例演示了不同类型的数组
指针
定义方式及其...
C语言程序设计数组
字符串
指针
PPT学习教案.pptx
"C语言程序设计数组
字符串
指针
PPT学习教案.pptx" 该PPT学习教案主要讲解了C语言程序设计中数组、
字符串
和
指针
的概念和使用方法。 数组是C语言中一种重要的数据结构,用于存储一组相同类型的数据元素。数组可以是一...
C语言:数组、
指针
与
字符串
(简易入门、精髓)
在C语言中,数组、
指针
和
字符串
是基础且重要的概念,它们构成了C语言的核心特性。数组是一系列相同类型变量的集合,可以是一维、二维或多维的。数组的声明通常采用`类型名 数组名[常量表达式]`的形式,例如`int a[10...
C语言
70,026
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章