字符数组和字符串的小细节

目录

  • 1. 背景知识
  • 2. 指向字符串的指针
    • 2.1 代码A
    • 2.2 代码B
    • 2.3 结论
  • 3. 字符数组
    • 3.1 代码C
    • 3.2 总结
  • 4. 拓展

1. 背景知识

1、字符串就是一个地址。

2. 指向字符串的指针

2.1 代码A

const char *a = "unix";
char *b = "hello";pritnf("%s \n", a);
a = b;
printf("%s \n", b);/**---------input----------**/
// unix
// hello

关于代码A中Line 1疑问

  • const 作用于下面那一个?
    • 指针a
    • 指针a指向对象的值

对比代码A中input,我们可以确定,const 修饰的声明中,a的地址是可以被改变的。

2.2 代码B

当我们把代码A中的Line 5修改为
*a = *b;

编译器给出错误提示:[Error] assignment of read-only location '*a'
中文意思是赋值给只读位置*a*a就是a指向对象的值,所以 *a = *b错误

2.3 结论

const char *a = "hello" 语句中const修饰的是a指针指向内存的值

3. 字符数组

3.1 代码C

char a[20] = "hello world";
char *b = "hello";
printf("%p = %s\n", a,a); a[0] = 'a';
printf("%p = %s\n", a,a);
/**---------input----------**/
// hello world
// aello world 

关于代码C中疑问

  • 数组的元素和地址是否可以更改
    • Line 1 : 字符数组可以对其元素进行更改

把代码C中Line 4 改成
a = ba = "hi"
都会出现错误提示: [Error] assignment to expression with array type
中文通俗意思:不可以赋值给具有数组类型的表达式。这里的表达式是指整个数组的首地址。

也就是说在C语言内部 数组的首地址是不可更改的,相当于被const修饰

3.2 总结

数组的元素可以更改,而数组的首地址为只读

4. 拓展

在第二节中,讨论了const对指针对象的作用,那么有没有办法让指针本身只读?

char *const a;
a =  "hello";   
printf("%p = %s\n", a,a); 

上述代码会提示 [Error] assignment of read-of 'a'
中文意思为 错误:为只读的'a'赋值

所以,类型描述 *const 变量名 即可让指针变量为只读。


我愿以为博客园对makedown支持不是很好。没想到连目录都支持了。基本功能算是不错了。美中不足的代码块行数显示不了

转载于:https://www.cnblogs.com/Fsiswo/p/11133211.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ1459-Power Network

转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1299339754 提示:BFS找增广链 压入重标法 解题思路:多源多汇最大流问题题目给出很多都是废话,特别是符号s(u),d(u),Con还有那条公式都别管…

http强缓存在firefox和chrome之间的差异

最近回顾HTTP缓存知识的时候发现了一个问题,设置了强缓存和协商缓存的文件,点击浏览器的刷新按钮的时候在chrome和firefox中的表现不一样。具体表现为chrome走强缓存没有再次发起请求。firefox却在强缓存没有失效的情况下发了请求,返回了304走…

垃圾收集器–串行,并行,CMS,G1(以及Java 8中的新增功能)

4个Java垃圾收集器–错误的选择如何严重影响性能 在2014年,对于大多数开发人员来说,还有两件事仍然是个谜:垃圾收集和了解异性。 由于我对后者知之甚少,所以我认为我会对前者大吃一惊,特别是因为在该领域中&#xff0c…

基于webpack的react脚手架

一、前言:react的cli开发模式太过于简单,好多东西都要自己配置 二、这里有个简单的配置,可以直接上手开发(不熟悉webpack和npm的绕路),已经完成的配置如下 1:默认ejs模板 2:编译less、scss 3&#xff1…

从数学到密码学(八)

数学基础(三) 从本节起,我们开始进入大学数学的领域--近世代数(也称抽象代数)。 先给出几个基本概念/定义。 [代数运算]:对于集合A的任意元素a、b,如果按某一运算法则&am…

Oracle.ManagedDataAccess 连接数据库用户名密码错误

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy] “Enabled” dword:00000000 转载于:https://www.cnblogs.com/Elcser/p/11134100.html

IE9下apply的使用方式

起初看到这段代码的时候先不管在干啥,仅仅是尝试理解就发现很绕,现记下以便回顾。 Function.prototype.apply.call(console.error, console, args);其实主要做的事情就是console.error(array),使用数组作为参数调用console.error。 分解&am…

不要错过使用jOOλ或jOOQ编写Java 8 SQL单行代码的机会

越来越多的人通过为他们的业务采用功能性编程来赶上我们平台的最新更新。 在Data Geekery ,我们将Java 8用于jOOQ集成测试,因为将新的Streams API与lambda表达式一起使用使生成临时测试数据变得非常容易。 但是, 我们并不认为JDK提供了尽可…

Redis---概述

1.概述 Redis是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串,列表,集合,散列表&#xf…

AJAX Control Toolkit——DropShadow(阴影和圆角框)

该控件的效果就是可以使相应的Panel产生阴影和圆角框的效果,要说的是该控件在CSS3来临之际并不存在多大的意义了,因为在CSS3中同样可以实现而且更加理想的效果。 但是要说明的是不要为目标Panel添加过多的CSS属性,不然会出现预料之外的效果&a…

node实现简单的群体聊天工具

一、使用的node模块 1、express当做服务器 2、socket.io 前后通信的桥梁 3、opn默认打开浏览器的模块(本质上用不到) 难点:前后通信 源码地址:https://github.com/wjf444128852/SimpleChat 欢迎clone并运行、扩展改进、issues 二、基础样子&#…

CSS中的三种样式来源:创作人员、读者和用户代理

查看原文:https://www.cnblogs.com/JJJJJKKKKK/articles/4542545.html CSS中的样式一共有三种来源:创作人员、读者和用户代理,来源的不同会影响到样式的层叠方式,很多第一次学习CSS的朋友,对这三种来源可能会存在一些…

具有jOOQ和Java 8的CompletableFuture的异步SQL执行

响应式编程是一个新的流行词,它实际上仅表示异步编程或消息传递。 事实是,函数语法极大地帮助构建了异步执行链,今天,我们将看到如何使用jOOQ和新的CompletableFuture API在Java 8中做到这一点。 实际上,事情很简单&…

关于模板引擎handlebars.js基本用法

说明:模板引擎主要针对于渲染DOM,取代了字符串拼接,用下面的代码亲测handlebars模板引擎比字符串拼接渲染DOM慢了20ms, 这里配置一个在线DEMO,简单说明下handlebars.js的基本用法,需要根据获取的数据去渲染…

create react app创建的项目运行test的时候不能解析webpack的alisa配置的问题

使用babel插件npm install babel-plugin-module-resolver,并在.babelrc文件中加入如下: {"plugins": [["module-resolver",{"alias": {"": "./src"}}]] }详情查看babel-plugin-module-resolver插件文…

使用Spring Security的多租户应用程序的无状态会话

从前, 我发表了一篇文章,解释了构建无状态会话的原理 。 巧合的是,我们再次针对多租户应用程序执行同一任务。 这次,我们将解决方案集成到Spring Security框架中,而不是自己构建身份验证机制。 本文将解释我们的方法和…

C# 退出提示 事件提示两次问题

private void frmCtiState_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason CloseReason.ApplicationExitCall) return; DialogResult result MessageBox.Show("是否退出系统?", "消息", MessageBoxB…

What?一个 Dubbo 服务启动要两个小时!

前言 前几天在测试环境碰到一个非常奇怪的与 dubbo 相关的问题,事后我在网上搜索了一圈并没有发现类似的帖子或文章,于是便有了这篇。 希望对还未碰到或正在碰到的朋友有所帮助。 现象 现象是这样的,有一天测试在测试环境重新部署一个 dubbo …

React hook 中的数据获取

相关说明: 对于hook相关词不翻译,感觉翻译后怪怪的。 effect hook 效果钩子,用于执行一些副作用例如获取数据 。 state hook 状态钩子。 使用----------- 和 ----------- 标出代码需要关注的地方。 渣翻译如下: 在这个指南中…

嵌入式Jetty和Apache CXF:借助Spring Security来保护REST服务

最近,我遇到了一个非常有趣的问题,我认为这只花了我几分钟就解决了:在Windows Server 2003中使用Spring Security (当前稳定版本3.2.5 )保护Apache CXF (当前版本3.0.1 )/ JAX-RS REST服务。在嵌…