字符指针 赋值

字符指针 赋值字符串赋值给字符指针(char*a=“hello”)的正确理解方式 对于语句 char*a=”hello”;       对于这个声明方式,会造成的误解是:声明了一个字符指针(它会指向一个位置),将“字符串”赋值给指针表达式”*a”所指向的地址。但正解是:声明了一个字符指针后,并用字符串常量的第一个字符的地址赋值给指针变量a。       即正确顺序是:1.分配

大家好,又见面了,我是你们的朋友全栈君。

对于语句 char *a=”hello”;
对于这个声明方式,会造成的误解是:声明了一个字符指针(它会指向一个位置),将“字符串”赋值给 指针表达式”*a”所指向的地址。但正解是:声明了一个字符指针后,并用字符串常量的第一个字符的地址赋值给指针变量a。 

        即正确顺序是:1.分配内存给字符指针;2.分配内存给字符串;3.将字符串首地址赋值给字符指针;
这里有两点需要考虑清楚的地方

①*a只是指向一个字符。举例如下:
[c++]
1. #include <stdio.h>

2. #include <stdlib.h>

3.
4. int main(void){

5. char *a=”bcd”;
6. printf(“输出字符:%c /n”, *a); /*输出字符,使用”%c”*/<br> printf(“输出字符:%c /n”, *(a+1) ); /*输出字符,使用”%c”*/
7. printf(“输出字符串:%s /n”, a); /*输出字符串,使用”%s”;而且a之前不能有星号”*” */
8. system(“pause”); /*为了能看到输出结果*/

9. }
10. /*运行结果如下:
11. 输出字符:b<br>输出字符:c 

12. 输出字符串:bcd*/ 

  
② 若字符串常量出现在在表达式中,代表的值为该字符串常量的第一个字符的地址。所以”hello”仅仅代表的是其地址。 原声明方式相当于以下声明方式:
[c++]
1. char *a;
2. a=”hello”;/*这里字符串”hello”仅仅代表其第一个字符的地址*/ f(“输出字
符:%c /n”, *(a+1) );  /*输出字符,使用”%c”*/  
7.     printf(“输出字符串:%s /n”, a); /*输出字符串,使用”%s”;而且a之前不能有星号
“*”  */   
8.     system(“pause”);  /*为了能看到输出结果*/   9. }  
10. /*运行结果如下: 
11. 输出字符:b<br>输出字符:c  12. 输出字符串:bcd*/   

*********************************************************************************************************************

C语言中,为什么字符串可以赋值给字符指针变量

char *p,a=’5′;

p=&a;                     //显然是正确的,

p=”abcd”;              //但为什么也可以这样赋值??

问:一直理解不了为什么可以将字串常量赋值给字符指针变量

 

答:

双引号做了3件事: 

1.申请了空间(在常量区),存放了字符串

2. 在字符串尾加上了’/0′    

3.返回地址

你这里就是 返回的地址  赋值给了  p                     






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/157257.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python 变量数据使用 json 进行序列化与反序列化操作

    python 变量数据使用 json 进行序列化与反序列化操作

    2021年11月10日
  • 踩坑记录:springboot 不识别properties配置文件

    踩坑记录:springboot 不识别properties配置文件

    2020年11月19日
  • swift 语言获取触摸点坐标 touchesBegan 中的 touches的坐标获取「建议收藏」

    swift 语言获取触摸点坐标 touchesBegan 中的 touches的坐标获取「建议收藏」overridefunctouchesBegan(touches:Set,withEventevent:UIEvent){    varp=touches.anyObject().locationInview(self)  }很多老教材都是这个方法来获取,touches.anyObject(),可是最新的版本提示touches根本没有anyObject

  • 什么是Java分布式?

    什么是Java分布式?对于初学者来说,学习Java的根本动力就是分布式开发,特别是apache下面的hadoop、hdfs、hbase,这些基本是分布式开发的标配。那么这篇文章就来和大家一起聊聊分布式吧!一、什么是分布式系统?要理解分布式系统,主要需要明白一下2个方面:1、分布式系统一定是由多个节点组成的系统。其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。2、这些连通的节点上部署了我们的节点,并且相互的操作会有协同。分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服

  • qlogic官网_zabbix和nagios

    qlogic官网_zabbix和nagios引用http://hi.baidu.com/zeorliu/blog/item/be188aca2ce3ab8fc9176858.html2009-06-1716:26http://asmboy001.blog.51cto.com/340398/111496CactiNagiosSquid三个工具的一些区别cacti是

  • pycharm修改环境_pycharm更改环境

    pycharm修改环境_pycharm更改环境因为有时需要在Terminal中调试代码,而且调试前需要配置环境变量,虽然操作不麻烦,但用起来总不习惯.特别是项目比较多时,需要频繁进到设置里面去改.以前设置环境变量的操作如下图:Settings-Tools-Terminal-ProjectSettings-Enviromentvariables添加环境变量比如我们有一个文件env.list里面的内容如下:IN_HOST=’192.168.0.6’#数据库主机IPIN_PORT=8888#数据库端口IN_US

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号