首页 > 其他分享 >const和char*的自由组合

const和char*的自由组合

时间:2024-02-26 14:24:27浏览次数:18  
标签:const 常量 指向 char 自由组合 ptr 指针

在C语言中,char *constconst char* 以及 char const* 确实存在区别,虽然有时这些区别可能微妙但非常重要。让我们逐一分析:

  1. char *const(常量指针):
    这意味着指针本身是常量,即一旦被初始化,它的地址就不能再改变。然而,它指向的值是可以改变的。也就是说,你不能将这个指针重新指向另一个地址,但是你可以改变它所指向的地址处的数据。
    例如:
    char *const ptr = "Hello"; // 错误,ptr 不能被修改
    *ptr = 'J'; // 正确,可以修改ptr指向的字符
    
  2. const char*(指向常量的指针):
    这意味着指针指向的是一个常量字符,即你不能通过这个指针来修改它所指向的内容。然而,指针本身是可以改变的,你可以让它指向其他的地址。
    例如:
    const char* ptr = "Hello"; // 正确,ptr可以指向其他地址
    *ptr = 'J'; // 错误,不能通过ptr修改指向的内容
    
  3. char const*:
    这个声明与 const char* 是完全相同的,只是把 const 放在了不同的位置。在C语言中,声明中的 constchar 的顺序可以互换,但 *const 之间的顺序不能变。
    例如:
    char const* ptr = "Hello"; // 与const char*完全相同
    

总结一下,char *constconst char* 之间的区别在于 char *const 表示指针本身是常量,而 const char* 表示指针所指向的内容是常量。在编写代码时,理解这些细微的差别对于确保程序的正确性和安全性是非常重要的。

标签:const,常量,指向,char,自由组合,ptr,指针
From: https://www.cnblogs.com/faithlocus/p/18034225

相关文章

  • 【Gorm 错误收集】Error 1215 (HY000): Cannot add foreign key constraint
    错误:Error1215(HY000):Cannotaddforeignkeyconstraint相关mysql错误:Error1215(HY000):Cannotaddforeignkeyconstraint。场景:为了方便测试人员测试产品的功能以及后续报告,PM设计了一个测试用例的功能,用于记录需要测试的产品的操作步骤。针对这个功能,我建立......
  • extern、const、register、static、inline关键字 --20240225
    extern关键字extern关键字有两种用法:1、用于声明一个全局变量或函数的外部链接性2、extern"C"是一个语言特性,用于告诉编译器按照C语言的方式对待指定的代码块,以确保与C语言兼容 用法一:用于声明一个全局变量或函数的外部链接性//file1.c#include<stdio.h>intn......
  • C#:winform使用chart控件绘制折线图,时间轴可缩放
    C#:winform使用chart控件绘制折线图,时间轴可缩放Chart坐标轴横轴为时间,纵轴是数值如果只是一次性绘图,那么遍历一遍数据即可如果想连续绘制(比如按照时间更新绘制),就需要一个Timer控件来更新绘图的数据。以下为项目代码:GUI界面添加一个Chart和一个timer即可usingSystem;using......
  • conda报错、anconda报错:requests.exceptions.JSONDecodeError: Expecting value: line
    anconda报错,报错信息:requests.exceptions.JSONDecodeError:Expectingvalue:line1column1(char0)不能使用conda新建环境和安装library库,网上搜索相关问题后发现是之前配置的第三方源地址出现了问题。解决方法:shell中输入命令:condaconfig--remove-keychannels......
  • delphi Byte 与 AnsiChar、WideChar 相互转换
    Byte与AnsiChar、WideChar相互转换代码Byte转AnsiChar、WideCharprocedureTForm1.Button1Click(Sender:TObject);varac:AnsiChar;wc:WideChar;bys:TBytes;begin//ANSI编码ac:='a';bys:=BytesOf(ac);Memo1.Lines.Add(bys[0].ToString);......
  • 「CF1575L」 Longest Array Deconstruction
    双倍经验如果本文出锅,请评论或私信提醒这个蒟蒻修改!题意题目给的很清楚了,不多说。分析看到题目,因为在dp题单里,所以一眼是个dp,我们先想朴素算法,可以发现,如果设\(f_{i,j}\)表示前\(i\)个数中删掉\(j\)个所能得到的最大结果,若\(a_i=i\),则\(f_{i,j}=f_{i-1,j}+1\);否则,可......
  • const与mutable关键字
    1异步操作,使用lambda表达式,参数采用传值方式;window直接修改传输参数的值,并打印使用正常;linux报错:errorpassingconst**asthisargumentof**discardsqualifier[-fpermissive]const关键字用于类的成员函数,成为常成员函数,即:不允许在常成员函数的内部(实现里)修改......
  • let、const、var、function所谓的”变量提升“、暂时性死区到底是什么
    今天看了大佬一个文章我用了两个月的时间才理解let-知乎(zhihu.com),文章中其实说得很清楚,还有大佬解决这个问题的整个心路历程。我这里做一个总结记录,专注于“变量提升”、暂时性死区这两个点做一个讨论。现象讨论下面这两段代码,我们都知道这段代码在控制台会打印undefined......
  • C++ constexpr
    C++constexpr比如我有一个函数,返回10intget10(){return10;}我想拿去初始化数组大小intarraynum[get10()];编译器会报错,因为会说只能用常量去初始化,所以我们可以用constexpr,把函数改成常量表达式,这样编译器在编译阶段就知道了常量。再比如一个可变参函数模板,我想......
  • Charles 抓包工具,支持抓取 exe 无需要额外设置,打开就能使用
    Charles抓包工具,支持抓取exe无需要额外设置,打开就能使用支持Windows、macOS、Linux操作系统下载地址:https://www.charlesproxy.com/download/latest-release/生成注册码生成注册码地址:https://www.charles.ren/RegisteredName:https://zhile.ioLicenseKey:48891c......