Chinaunix首页 | 论坛 | 博客
  • 博客访问: 436894
  • 博文数量: 89
  • 博客积分: 2713
  • 博客等级: 少校
  • 技术积分: 938
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-18 21:19
个人简介

为了成为自由自在的人而奋斗!

文章分类

全部博文(89)

文章存档

2016年(5)

2015年(9)

2014年(2)

2013年(10)

2012年(1)

2011年(30)

2010年(32)

分类: C/C++

2010-08-19 22:57:02

看下这程序就懂了!呵呵
#include
#include

int main(void)
{
    char *p1[] = {"abc", "de"};
    char p2[][8] = {"2abc", "2de"};
    char *p3 = "3abc";
    char p4[] = "4abc";
    int i;

    p1[1] = "aaa";
//错误    p1[1][1] = 'b';
//错误    strcpy(p1[1], "p1");
    printf("p1:\n");
    for (i = 0; i < 2; i++) {
        printf("%s\n", p1[i]);
    }

//错误    p2[1] = "bbb";
    strcpy(p2[1], "p2");    //可以了
    p2[1][1] = '9';         //这样可以了
    printf("\np2:\n");
    for (i = 0; i < 2; i++) {
        printf("%s\n", p2[i]);
    }

    p3 = "3def";
//错误    p3[2] = '0';
//错误    strcpy(p3, "p3");
    printf("\np3 is %s\n", p3);

//错误    p4 = "4def";
    strcpy(p4, "p4");       //可以了
    p4[0] = 'f';            //这样可以了
    printf("p4 is %s\n", p4);
   

    return 0;
}

总结就是指针和数组的差别。指针指向的是一个内存区域,属于间接访问。数组是直接访问。
对于p3指向字符串常量
"3abc",常量的位置内容不可以更改,但是指针所指的内存可以更改。
对于p4数组,就是一个内存区域,是程序运行后分配的,内容可以改,所以就可以按位赋值,也可以使用strcpy操作。p4也是指针,指向数组首地址。但是,p4不可变,相当于p4是常量指针,指向的位置只能是p4数组所分配的空间。p4 = "4def"使p4指向字符串常量"4def"所在的内存就错了。


阅读(645) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~