剑指offer笔试题 · 常量字符串

简介: 常量字符串

🔥每篇前言


  • 博客主页:安然无虞
  • 作者介绍:2021年博客新星Top2
  • 咱的口号:🌹小比特,大梦想🌹
  • 作者请求:由于博主水平有限,博文中难免会有错误和不准之处,我也非常渴望知道这些错误,恳请铁汁批评斧正。
  • 火爆专栏:蓝桥杯基础算法剖析


文章目录






1.引入:字符指针

在指针类型中我们知道有一种指针类型是char*,它有两种使用方法:

一般使用:

 #include<stdio.h>
 int main()
 {
      char ch = 'w';
      char* pc = &ch;
      *pc = 'a';
      printf("%c\n", ch);
      return 0;
 }

这种使用方法比较简单,我就不过多阐述了,看看下面这种使用方法:

 #include<stdio.h>
 int main()
 {
      char* p = "abcdef";
      printf("%s\n", p);
      return 0;
 }
  1. 注意上面的 abcdef 是常量字符串,存储在内存的只读数据区(只读不可写)
  2. 特别容易让我们以为是把字符串 abcdef 放到字符指针 p 里了,其实本质上是把字符串 abcdef 首字符的地址放到 p 中

所以下面代码是有问题的:

#include<stdio.h>
 int main()
 {
      char* p = "abcdef";
      *p = 'w';//目的是将'a'改成'w'(bug)
      return 0;
 }

上面的第6行代码是错误的,因为常量字符串不可以修改,所以为避免上述错误,可将第5行代码修改为:

const char* p = "abcdef";
• 1

这样的话就会避免上述错误。



2.剑指offer · 常量字符串面试题

面试题:

#include <stdio.h>
int main()
{
    char str1[] = "hello bit.";
    char str2[] = "hello bit.";
    char* str3 = "hello bit.";
    char* str4 = "hello bit.";
    if (str1 == str2)
        printf("str1 and str2 are same\n");
    else
        printf("str1 and str2 are not same\n");
    if (str3 == str4)
        printf("str3 and str4 are same\n");
    else
        printf("str3 and str4 are not same\n");
    return 0;
}

解题思路:

  1. str1 和 str2 是两个字符数组,数组的操作方式是将右边的常量字符串拷贝到数组的空间中,所以它们是两块空间,只是内容相同,而作为数组名,str1 和 str2 是数组首元素的地址,所以 str1 != str2


  1. str3 和 str4 是两个字符指针,指向的是同一个常量字符串,而常量字符串存储在单独的一个内存区域(只读数据区),当几个指针指向同一个常量字符串的时候,它们实际上会指向同一块内存


3.遇见安然遇见你,不负代码不负卿。

前段时间博主状态不好,没有及时更新,后面就会慢慢提速咯,感谢大家的支持与陪伴。


相关文章
|
7月前
|
C语言
C语言期末习题之数组逆序存放
C语言期末习题之数组逆序存放
117 0
|
6月前
|
C语言
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
|
7月前
|
C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(上)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
47 0
|
7月前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
|
7月前
|
C语言 C++
C语言:指针运算笔试题解析(包括令人费解的指针题目)
C语言:指针运算笔试题解析(包括令人费解的指针题目)
|
7月前
|
算法 C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(下)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
35 0
|
7月前
|
C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(中)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
38 0
|
7月前
|
算法 搜索推荐 程序员
C语言第二十六练 实现罗马数字转整数
C语言第二十六练 实现罗马数字转整数
107 0
|
7月前
|
存储 算法 C语言
C语言练习记录(蓝桥杯练习)(小蓝数点)
C语言练习记录(蓝桥杯练习)(小蓝数点)
|
存储 Unix 编译器
猿创征文|C语言操作符(运算符)一万多字的详细解析
猿创征文|C语言操作符(运算符)一万多字的详细解析