| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 840 人关注过本帖
标题:求助:数组与指针的差别
只看楼主 加入收藏
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
结帖率:95.24%
收藏
已结贴  问题点数:20 回复次数:14 
求助:数组与指针的差别
在VC下运行时会出错,书上的内容看了好几遍,还是无法理解是在哪个地方出错。
求指点。

程序代码:
# include <stdio.h>
int main (void)
{
    char * p1 = "Aaaaaaa";
    *p1= 'B';
    printf ("    %s\n", "wwqrreqewr");
}
2015-01-12 17:26
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
收藏
得分:1 
回复 楼主 TAAAAB
你那儿是是编译报错,还是运行报错,我这儿毫无压力
2015-01-12 17:48
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
回复 2楼 轉身已陌路
运行出错,编译没问题

人有多懒,编程就有多难。
2015-01-12 17:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
这种问题坛上解释过多次,老话题了。常量数据是不可改变的。

授人以渔,不授人以鱼。
2015-01-12 17:57
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
这种声明 char * p1 = "Aaaaaaa";  就是所谓的常量字符串  常规方法不可修改

DO IT YOURSELF !
2015-01-12 17:58
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:2 
char * p1 = "Aaaaaaa";
这是定义了一个字符串常量
这个常量存于静态存储区中
指针p1指向了字符串的首个字符的地址
p1本质上是个字符指针
*p1= 'B';
这样做因为类型合法 编译能通过
但是实际上执行结果是错误的
因为赋值不能改变常量值 类似不能 1 = 0

重新赋值是可以的
但应该把一个字符串常量赋值给*p1
而不是把一个字符赋值给*p1
你可以改成
p1 = "B";

或者改成这样
程序代码:
# include <stdio.h>
# include <stdlib.h>
int main (void)
{
    char *p1 = "Aaaaaaa";
    puts(p1);
    p1 = malloc(sizeof(char)); //这时p1已经不指向字符串常量了 指向一个闲置的内存地址
    if(p1) *p1 = 'B';
    putchar(*p1);
    free(p1);

    printf ("    %s\n", "wwqrreqewr");
}

Only the Code Tells the Truth             K.I.S.S
2015-01-12 18:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:6 
指针和数组的差别:
1.数组是一间房屋,里面存放数据,房屋一旦建好,是无法挪动的,数组名是房屋的门口,这所房屋是独特的,不是别的房屋,所以数组是唯一的。
2.指针是名片,上面写着某所房屋的地址,你要入门,必须先按地址找到门口,名片上的地址可以改变,但改后找到的地方,却不是数组那个门口,名片是唯一的,但上面的东西不唯一。
3.指针所指向的地方,必须实有其物,乱指的是野指针,指向上午8时的太阳位置,到下午4时还根据那个地址去找太阳,必定找不到,但问题是你以为太阳还在那里。

建立好模型,数组和指针的异同,很容易理解,写程序也心中有数。建立模型,是非常重要的事情,要学会这个。

授人以渔,不授人以鱼。
2015-01-12 20:50
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
这样理解不知道对不对?
总之现在比较纠结,有时感觉想通了,但是做书上习题的时候又很不顺。

程序代码:
//把字符串常量中的每个字符分别赋给数组中的每个元素。数组名是指针常量,数组元素是变量。
char str[50] = "Bbbbbbb";
    
//把字符串常量中第一个字符的地址赋给char *类型指针。ptr1是指针变量。*ptr1是常量。
char * ptr1 = "Ccccccc";
        
str[0] = 'D'; //给常量赋值,正确。
*ptr1 = 'D'; //给常量赋值,错误。
str++; //常量不能自增运算,错误。
ptr1++; //变量可以自增运算,正确。

ptr1 = str;//虽然改变了指针变量ptr1的值,但是字符串“Ccccccc”其实并没有消失

************************************
如果编译器支持下面代码,那么输出结果会是Wcccccc
char * ptr1 = "Ccccccc"; 
*ptr = 'W'; 
printf ("%s\n", "Ccccccc");
************************************

人有多懒,编程就有多难。
2015-01-12 22:26
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
这样理解不知道对不对?
总之现在比较纠结,有时感觉想通了,但是做书上习题的时候又很不顺。

程序代码:
//把字符串常量中的每个字符分别赋给数组中的每个元素。数组名是指针常量,数组元素是变量。
char str[50] = "Bbbbbbb";
    
//把字符串常量中第一个字符的地址赋给char *类型指针。ptr1是指针变量。*ptr1是常量。
char * ptr1 = "Ccccccc";
        
str[0] = 'D'; //给常量赋值,正确。
*ptr1 = 'D'; //给常量赋值,错误。
str++; //常量不能自增运算,错误。
ptr1++; //变量可以自增运算,正确。

************************************
//ptr1 = str;//虽然改变了指针变量ptr1的值,但是字符串“Ccccccc”其实并没有消失
//如果编译器支持下面代码,那么输出结果会是Wcccccc
char * ptr1 = "Ccccccc"; 
*ptr = 'W'; 
printf ("%s\n", "Ccccccc");
************************************


[ 本帖最后由 TAAAAB 于 2015-1-12 22:27 编辑 ]

人有多懒,编程就有多难。
2015-01-12 22:26
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:2 
char * ptr1 = "Ccccccc";
*ptr = 'W
printf ("%s\n", "Ccccccc");
//如果编译器支持下面代码,那么输出结果会是Wcccccc


以上三行代码  有联系么????

Only the Code Tells the Truth             K.I.S.S
2015-01-12 22:41
快速回复:求助:数组与指针的差别
数据加载中...
 
   



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

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