| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9076 人关注过本帖
标题:为什么字符指针不能中的字符串不能被重新赋值而数组中的却可以?
只看楼主 加入收藏
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 9楼 弟大勿勃
当用"a[6]="asdfg";"这样的语句时,就是把字符串常量赋值到了数组中了,用"a[3]='s';"
这样的语句实际是改变数组的第四个元素的值,就可行。那么,在这里数组a就是一个变量了
咯,不然怎么能改变它的值呢!就是说"a[6]="asdfg";"这样的语句赋值了a,但它还是个变量?

关键问题前面那个是指针,指向了静态常量,所以不许通过指针修改。而后者的a自己是个变量,自己有自己的空间,和静态常量“asdf”不是一个东西,只是用静态常量来给a初始化而已,当然可以改了。

你都用malloc了,应该知道指针和数组是类似的又是有区别的,声明指针的时候他就只是一个指针,而生命数组的时候它是向内存申请一块空间,并把空间的地址返回过来。数组也是指针,不过是已经带有存放数据的空间了。。

指针可以指向另一个指针,而数组不行。



[此贴子已经被作者于2016-10-10 14:14编辑过]


φ(゜▽゜*)♪
2016-10-10 14:07
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:5 
知道是字符串常还不简单,直接百度字符串常量看看是什么东东不就好了。真的要解释那能一两句说清楚。
2016-10-10 15:57
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
回复 11楼 书生牛犊
感谢感谢!我又看了一下堆栈这一块的知识,加深了理解。
2016-10-10 16:23
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
回复 7楼 word123
我给指针a分配了一个动态空间a=(char*)malloc(10);
然后用gets()函数输入字符串,此时我用 a[3]='s';
语句能修改字符串的值。这就说明给指针变量a分配了
动态内存后,就会使a产生什么变化(不再是指针?)
这样做好像使栈中的a指向了分配域(堆中的)起始地址,不再
指向了"adfth"字符串常量,所以当用gets函数输入字符串到
a所指的分配域中后,可以用a[3]='s';语句改变字符串的值
(此时a相当于一个数组了)。
#include<stdio.h>
void main()
{
    char *a;
    a=(char*)malloc(10);
    gets(a);
    //a="adfth";
    a[3]='s';
    printf("%s\n",a);
}
不知道我以上的分析对不对,不对请纠正指出!
2016-10-10 16:59
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:0 
回复 14楼 弟大勿勃
差不多吧,反正你只要记住常量值不能变,堆栈上分配了空间的值能够修改
2016-10-10 18:28
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
回复 15楼 word123
嗯,谢谢
2016-10-10 19:49
快速回复:为什么字符指针不能中的字符串不能被重新赋值而数组中的却可以?
数据加载中...
 
   



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

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