本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。

文章目录

  • 一、字符串数组的初始化
  • 二、“*const char arr[] = 字面量* ”与“*const char \*pt = 字面量* ”的区别
    • 2.1 对于“*const char arr[] = 字面量* ”
    • 2.2 对于“*const char \*pt = 字面量* ”

一、字符串数组的初始化

我们通常使用下面的code进行字符串数组的初始化:

const char arr[] = "Cong Shan Ruo Shui de Blog";
//或者
const char *pt = "Cong Shan Ruo Shui de Blog";

以上两个声明表明,pt与arr都是该字符串的地址。在这两种情况下,带双引号的字符串本身决定了预留给字符串的存储空间。尽管如此,这两种形式不完全相同。

二、“const char arr[] = 字面量 ”与“const char *pt = 字面量 ”的区别

其实本质就是数组与指针的区别

2.1 对于“const char arr[] = 字面量

以上面的声明为例子,数组形式(arr[])在计算机的内存中分配为一个内含27个元素的数组(加上吗,末尾的‘\0’),每个元素被初始化为字符串字面量对应的字符。

通常,字符串都作为可执行文件的一部分存储在数据段中。当程序载入内存的时候,也载入了程序中的字符串。字符串存储在静态存储区(static memory)中

但是,程序在开始运行时才会为该数组分配内存。此时,才将字符串拷贝到数组中。注意,此时字符串有两个副本。一个是在静态内存中的字符串字面量,另一个是存储在arr数组中的字符串。

arr是一个常量,不能使用自增访问,但是可以使用类似arr+1的操作

2.2 对于“const char *pt = 字面量

指针形式(*pt)也使得编译器为字符串在静态存储区预留了27个元素的空间。另外,一旦开始执行程序,它会为指针变量pt留出一个存储位置,并把字符串的地址存储在指针变量中。该变量最初指向该字符串的首字符,但是它的值可以改变。

指针pt是变量,所以可以使用递增运算符

大家看一个例子

#include<stdio.h>#define MSG "Cong shan ruo shui"int main()
{const char arr[] = MSG;const char *pt = MSG;printf("address of \"Cong shan ruo shui\":%p\n","Cong shan ruo shui");printf("address of arr :%p\n",arr);printf("address of pt :%p\n",pt);printf("address of MSG :%p\n",MSG);printf("address of \"Cong shan ruo shui\":%p\n","Cong shan ruo shui");return 0;
}

输出结果如下

  • 上面code的输出说明 pt和MSG的地址相同,而arr的地址不同,这与我们前面讨论的内容一致。
  • 虽然字符串字面量“Cong shan ruo shui”在程序的两个printf()函数中出现两次,但是编译器只使用了一个存储位置,而且与MSG的地址相同。编译器可以把多次使用的相同字面量存储在一处或多处。另一个编译器可能在不同位置存储3个“Cong shan ruo shui”
  • 静态数据使用的存储与arr使用的动态内存不同。不仅值不同,特定编译器甚至使用不同的位数表示两种内存。

C语言面试必备——char a[]=“从善若水“ 与 char *p=“从善若水“ 的区别相关推荐

  1. c语言终极面试宝典 pdf,C语言终极面试宝典_C语言面试必备

    第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一 ...

  2. c语言字符串的一般操作有,面试必备——常见的C语言字符串操作

    原标题:面试必备--常见的C语言字符串操作 面试中常见的C语言字符串操作,快来看看,是否对你有帮助! 字符串倒序输出 实现逻辑,通过strlen获取字符串长度,然后通过 len/2 进行交叉赋值,这里 ...

  3. 阿里最新面试必备项之Java的String类,持续更新中!

    最新腾讯面试必备项之Java的String类,持续更新中! 1.1 String的特性 String类:代表字符串.Java程序中的所有字符串字面值(如"abc")都作为此类的实例 ...

  4. Python程序员面试必备常用问题答案及解析

    源 | 小象     文 | 水木华章 在发布<Python程序员面试,这些问题你必须提前准备!>一文后,应广大程序员朋友的强烈要求,小编就Python程序员面试必备问题整理了一份参考答案 ...

  5. 李洪强iOS经典面试题156 - Runtime详解(面试必备)

    李洪强iOS经典面试题156 - Runtime详解(面试必备)   一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C ...

  6. redis cluster 集群 HA 原理和实操(史上最全、面试必备)

    文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 经典图书:<Java高并发核心编程(卷1)> 面试必备 ...

  7. 算法面试必备-----数据分析常见面试题

    算法面试必备-----数据分析常见面试题 算法面试必备-----数据分析常见面试题 1.统计学问题 问题:贝叶斯公式复述并解释应用场景 问题:朴素贝叶斯的理解 问题:参数估计 问题:极大似然估计 问题 ...

  8. 算法面试必备-----数据库与SQL面试题

    算法面试必备-----数据库与SQL面试题 算法面试必备-----数据库与SQL面试题 1.数据库理论问题 问题:什么是数据库,数据库管理系统,数据库系统,数据库管理员? 问题:什么是元组,码,候选码 ...

  9. 2020年 Java 最常见200+ 面试题全解析:面试必备

    Java 最常见200+ 面试题全解析:面试必备 如想了解更多更全面的Java必备内容可以阅读:所有JAVA必备知识点面试题文章目录: JAVA必备知识点面试题 序 言 在本篇文章开始之前,我想先来回 ...

最新文章

  1. 30万奖金!首个有阿里技术培训支持,让AI落定场景应用的赛事!
  2. Netflix的高可用架构建议
  3. [LeetCode] Binary Tree Postorder题解
  4. 最详细的使用 soapui 消费 SAP Cloud for Customer Web service 的教程
  5. 数据结构之二叉树:二叉查找树基本功能,Python代码实现——10
  6. mysql是gplv3,Affero-GPL和GPLv3之间的区别
  7. (33)SystemVerilog语言编写二分频
  8. .NET生成静态页面并分页
  9. spark学习——(二)spark基础环境配置-linux(1)
  10. 03.【Axure 10 】win系统软件汉化
  11. Android群英传知识点回顾——第七章:Android动画机制与使用技巧
  12. 多项式展开的逆过程的MATLAB实现
  13. 信息储存服务器有没有辐射,服务器存储主机存在辐射吗
  14. 功率 dbm vrms vpp mw换算 (正弦波)
  15. python钉钉机器人定时发送消息服务器_用Python写一个定时提醒的钉钉机器人
  16. 捍卫者usb管理控制系统_捍卫效用优先CSS
  17. 移动定向流量怎么用?怎么开通物联卡定向流量
  18. 【工具】- 在线画图
  19. sklearn的使用案例(以load_breast_cancer数据集为例)
  20. 机器学习 基于加州房价的线性回归实验

热门文章

  1. php输出12个月,在PHP中获取过去12个月
  2. mysql revoke详解_MySQL管理员帮你了解CREATE和REVOKE语句_MySQL
  3. elasticsearch(es)背景故事与基本概念
  4. 同余问题之中国剩余定理 _(:з」∠)_
  5. Android系统编译过程
  6. Bubble Cup 12 - Finals [Online Mirror, unrated, Div. 1] F. Workout plan(优先队列)
  7. 电脑开关机的正确操作。
  8. 最全笔记程序推荐收集
  9. 首届未来科学大奖得主薛其坤:神奇的量子世界
  10. android 手机获取外置SD卡路径