首页 > 其他分享 >【C语言基础】指向字符串的指针 & 字符串常量指针的关系

【C语言基础】指向字符串的指针 & 字符串常量指针的关系

时间:2023-10-20 14:33:41浏览次数:39  
标签:abcd 常量 指向 C语言 char 字符串 指针

问:指向字符串的指针 与 字符串常量指针有什么区别?

答:经过实践 指向字符串的指针 就是字符串常量指针。

字符串常量指针是常量指针的一种。常量指针的特点就是不能通过该指针来修改指向内存地址空间存储的值。

 

问:

来看一下常见面试题

char *p = “abcd”;
*p = ‘b’;
printf("%c\n", p[0]);

以上代码有什么问题?

答:

首先,编译器在常量区保存一个字符串abcd,其内容不许修改。
char *p = “abcd”; // p是一个指针,直接指向常量区,修改p[0]就是修改常量区的内容,这是不允许的。这正是常量指针的特点。

这里指针p就是一个常量指针,更具体一点说就是字符串常量指针。
"abcd"这个字符串程序没有给它分配空间,编译器把它分配到常量区,即全局(静态)变量区。

而以下通过数组的形式定义的,则是可以修改的。

char p[] = “abcd”; // 编译器在栈上创建一个字符串p,把abcd从常量区复制到p,修改p[0]就是修改一个局部变量,这是允许的。

 

测试代码:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     
 7     char a[] = "hello";
 8     a[0] = 'X'; //正常运行
 9 
10     char *p = "world"; // 注意p 指向常量字符串, 这里p就  相当于  常量指针
11     //p[0]= 'x';   //编译不会报错,但是运行会报错,因为不允许通过指针来修改指针p指向内存空间存储的值
12 
13     return 0;
14 }

 

标签:abcd,常量,指向,C语言,char,字符串,指针
From: https://www.cnblogs.com/FBsharl/p/17777046.html

相关文章

  • 实验2 C语言分支与循环基础应用编程
    实验任务1task1.c源代码:1#include<stdio.h>2#include<stdlib.h>3#include<time.h>45#defineN56#defineN13747#defineN246589intmain()10{11intnumber;12inti;1314srand(time(0));151......
  • 实验2 c语言分支与循环基础应用编程
    实验1实验1的源代码1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#defineN55#defineN13746#defineN24657intmain(){8intnumber;9inti;1011srand(time(0));//以当前系统时间作为随机种子1213for(i=0;i<N;++i......
  • 字符串
    约定\(S/s\):字符串。\(S[l,r]\):区间\([l,r]\)形成的子串。\(S^R\):将字符串\(S\)翻转。manacher理论字符串算法的精髓是最大的利用之前求出的信息,这就让增量法和自动机成了字符串算法中的核心思想。manacher算法可以在线性时间复杂度内求出以每个点为中心的极大回文子......
  • C语言的学习之初识C语言_6
    循环语句whilefordowhilewhile重点:break是用于永久的终止循环continue跳过本次循环后面的代码,直接去判断部分进行下一次循环的判断练习题intmain(){ charpassword[20]={0}; printf("请输入密码:"); scanf("%s",password); intch=0; /*ch=getchar();*/ //前......
  • 第一次博客——分享C语言学习
    今天又是在寝室里学习C语言的一天,学校里老师上课有点水,只能自己学习,幸好有比特鹏哥的帮助,C语言水平稳步增长。今天在鹏哥的带领下,学习了选择语句和循环语句。选择语句学习了if结构和switch结构,个人感觉switch结构虽然适用于多分支比较方便,但整型的限制比较大,很多语句后都不能遗忘br......
  • 如何结合Microhttpd库的C语言编写一个简单的爬虫
    今天要给大家分享的是,使用Microhttpd库的C语言编写一个用于采集人民网图片的蜘蛛程序,以便于大家进行更好的学习,让我们一起来学习一下。#include#include#include#include#include#include#include#include#include//定义一个函数来获取代理服务器char*get_proxy(){//......
  • C语言的学习之初识C语言_5
    什么是语句?C语句可以分为五类:1.表达式语句2.函数调用语句3.控制语句4.复合语句5.空语句控制语句:其中控制语句是用于控制程序的执行流程,实现程序的各种结构方式,由特定的语句定义符组成,C语言有九种控制语句。可以分为以下三类:1.条件判断语句,也叫分支语句:【if、switch】2.循环执行语句......
  • javascript如何写不用转义的字符串代码
    js中的String.raw函数 语法 String.raw`templateStr`;  String.raw(obj,...substitutions); 支持能力有限,如可以支持String.raw`c:\aaa\bbb`       //result:   c:\aaa\bbb 但是String.raw`c:\aaa\bbb\`       //result:  ......
  • Linux shell编程学习笔记8:使用字符串
    一、前言字符串是大多数编程语言中最常用最有用的数据类型,这在Linuxshell编程中也不例外。本文讨论了LinuxShell编程中的字符串的三种定义方式的差别,以及字符串拼接、取字符串长度、提取字符串、查找子字符串等常用字符串操作,,以及反引号在echo和expr命令联合使用时的作用。二......
  • Python中如何将字符串变成数字?
    字符串和数字是Python中常见的数据类型,而且在撰写Python程序的时候,也经常会遇到需要将字符串转换为数字的情况,那么Python中如何将字符串变成数字?有多种方法可以使用,接下来一起来看看具体内容介绍。1、使用int()函数int()函数可以将字符串转换为整数类型。例如,将字符串......