指针字符串 和 数组字符串的区别

1: 字符数组是由若干个元素组成, 每个元素放一个字符,     字符指针变量中存放的是一个地址(字符串的第一个字符的地址), 绝不是将字符串放到字符指针变量中。

2:赋值方式: 
             对 字符数组只能对各元素赋值, 不能用以下办法对 字符数组赋值
                   char str[14];
                  str = "i love china";
            对 字符指针变量, 可以采取下面的方法赋值
                    char *str;
                  str = "i love china";// 注意:  赋给str的不是字符, 而是字符串的第一个元                                 
                                                                  素的地址。
3:对 字符指针变量赋初值:
                char*str = "i love china";
                等价于    char*str;
                                str = "i love china";
     对 字符数组初始化:
                  char str[14] = {"i love china"};
                不等价于   char str[14];
                                    str[] = "i love china";//  数组可以在定义的时候整体赋初值,        
                                                                            但不能在赋值语句中整体赋值。
4:定义 字符数组, 编译时为他分配内存单元,有确定的地址
     定义 字符指针变量,给指针变量分配内存单元, 在其中可以放一个字符变量的地址
     也就是说,该指针变量可以指向一个字符型数据, 但如果未对他赋予一个地址值,     
     则他并未具体指向一个确定的字符数据。
        例如:
                      char str[10];
                        scanf("%s", str);
                    是可以的。而常有人用下面的方法:
                    char *str;
                    scanf("%s", str);
                    虽然有时能运行, 但这是危险的, 不提倡;
                    char*str, a[100];
                    str = a;
                    scanf("%s", str);//  先使str有确定值指向一个数组的首元素,然后输入一
                                                  个字符串, 把他存在从该地址开始的若干单元中;
5: 指针变量的值是可改变的
     例如:
             #include<stdio.h>
            void main()
            {
                char *a = "i love china";
                a = a +7;   // 间接表示a[7]
                printf("%s\n", a);//   从a[7]开始往后面输直到'\0';
                printf("%c", a[4]);   //a[4]是按*(a+4)处理, 即从a当前指的元素下移4个单
                                                   位输出其值;
             }
运行结果:china
                 指针变量的值是可以变化的,   而数组名代表地址, 但它是常量, 不能改
                变的
                特殊:定义一个指针变量, 并使它指向一个字符串, 就可以下标形式引用
                           指针变量所指的字符串中的字符
                    
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值