C++ char a[] char *a

举例:

      char  *s ;

      s = "China";

      为什么可以把一个字符串赋给一个指针变量。。

      这不是类型不一致吗???

      这就是上面提到的关键 。。

      C语言中编译器会给字符串常量分配地址,如果 "China", 存储在内存中的 0x3000 0x3001 0x3002 0x3003 0x3004 0x3005 .

      s = "China" ,意识是什么,对了,地址。

      其实真正的意义是 s ="China" = 0x3000;

      看清楚了吧 ,你把China 看作是字符串,但是编译器把它看作是地址 0x3000,即字符串常量的本质表现是代表它的第一个字符的地址。。。。。。。。。。

      s = 0x3000

      这样写似乎更符合直观的意思。。。

      搞清楚这个问题。。

      那么 %s ,它的原理其实也是通过字符串首地址输出字符串,printf("%s ", s);   传给它的其实是s所保存的字符串的地址。。。

      比如

[cpp] view plain copy print?在CODE上查看代码片派生到我的代码片

#include <stdio.h>  
 int main()  
 {  
    char *s;  
    s = "hello";  
    printf("%p\n",s);  
    return 0;  
 }  
  可以看到 s = 0x00422020 ,这也是"China"的首地址

  所以,printf("%s",0x00422020);也是等效的。。



   字符数组:

   char  str[10] = "hello";

   前面已经说了,str = &str[0] , 也等于 "hello"的首地址。。

   所以printf("%s",str); 本质也是 printf("%s", 地址");

    C语言中操作字符串是通过它在内存中的存储单元的首地址进行的,这是字符串的终极本质。。。

5  char *  与 char  a[ ];

   char  *s;

   char  a[ ] ;

   前面说到 a代表字符串的首地址,而s 这个指针也保存字符串的地址(其实首地址),即第一个字符的地址,这个地址单元中的数据是一个字符,

这也与 s 所指向的 char 一致。

  因此可以 s = a;

   但是不能 a = s;

   C语言中数组名可以复制给指针表示地址, 但是却不能赋给给数组名,它是一个常量类型,所以不能修改。。

   当然也可以这样:
char  a [ ] = "hello";  
char *s =a;  
for(int i= 0; i < strlen(a) ; i++)  
      printf("%c", s[i]);  
或  printf("%c",*s++);  修改。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值