首页 > 其他分享 >C语言中 p三种用法的区别

C语言中 p三种用法的区别

时间:2023-05-04 22:48:03浏览次数:43  
标签:p2 p1 const 指向 可以 用法 char 三种 C语言

请看下面三种定义:

const char *p;

char const *p;

char * const p;

首先看第一种,我们先看p,本着”从里往外”的原则,p是一个char *类型的变量,但char *前面有一个const修饰,即p所指向的内容为const类型不可修改,我们可以写如下程序进行实验,当试图对p指向的数组的第一个元素进行修改时,编译即可发现报错:

C语言笔试题const char *p; char const *p; char * const p;三者的区别

第二种:char const *p;  const位于char *之间,由于char *是p的类型,此种写法和const char *等价,大家可以自行实验,如下图:

C语言笔试题const char *p; char const *p; char * const p;三者的区别

最后一种,char * const p; 这里const在p之前,修饰的是p,即p是不可修改的,所以,我们可以实验:

C语言笔试题const char *p; char const *p; char * const p;三者的区别

可以看到没有错误,p所指向的内容可以修改,而如果试图修改p的值,如下:

C语言笔试题const char *p; char const *p; char * const p;三者的区别

可以发现依旧是报这个错误,大家可以亲自上机实验,来加深理解。

 

 

所以答案:

const char *p; // 声明一个指向字符或字符串常量的指针(p所指向的内容不可修改)

char const *p;// 同上

char * const p;//声明一个指向字符或字符串的指针常量,即不可以修改p的值。

 

const char *p1;   //p1可以被改变,*p1不可以被改变,既p1可以转向

char onst *p2;     //p2可以改变,*p2不可以被改变,既p2可以转向

char * const p3;  //p3不可以被改变,*p3可以被改变

const char const *p4;   //p4与*p4都不可以被改变

标签:p2,p1,const,指向,可以,用法,char,三种,C语言
From: https://www.cnblogs.com/full-stack-linux-new/p/17372751.html

相关文章

  • C语言结构体--位域
    有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。比如开关只有通电和断电两种状态,用0和1表示足以,也就是用一个二进位。正是基于这种考虑,C语言又提供了一种叫做位域的数据结构。在结构体定义时,我们可以指定某个成员变量所占用的二进制位数(Bit),这......
  • C语言多线程
    线程按照其调度者可以分为用户级线程和核心级线程两种 用户级线程主要解决的是上下文切换的问题,它的调度算法和调度过程全部由用户自行选择决定,在运行时不需要特定的内核支持; 我们常用基本就是用户级线程,所以就只总结一下POSIX提供的用户级线程接口; 基本线程操作相关的函数: 1......
  • C语言文件操作
    函数原型size_t fread(void *buffer, size_t size, size_t count, FILE *stream);  size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream);  功能 fread和fwrite用于读写记录,这里的记录是指一串固定长度的字节,比如一个......
  • C语言--指针的进阶2
    函数指针存放函数地址的指针。intAdd(intx,inty){ returnx+y;}intmain(){ inta=10; intb=20; //printf("%d\n",Add(a,b));//&函数名,函数名,都是函数的地址。 //int(*pa)(int,int)=&Add; int(*pa)(int,int)=Add;//对于函数指针的解引用下面都......
  • 弹幕标签(跑马灯)用法(前端开发小技能)
    弹幕标签1、注意弹幕标签marquee,现在一些浏览器是不支持的2、弹幕标签也叫跑马灯marquee格式及其含有的属性1、基本格式<marquee></marquee>2、一些属性1)direction属性:表示的是弹幕行走的方向,如下面实现向左行走<marqueedirection="left">这波操作6</marquee>其中direction还可以......
  • C语言函数指针数组,GCC编译问题
    使用C语言函数指针数组实现简单的计算器,代码如下#include<stdio.h>#include<stdlib.h>doubleadd(doublea,doubleb){return(a+b);};doublesub(doublea,doubleb){return(a-b);};doublemul(doublea,doubleb){return(a*b);};doubl......
  • [每天例题]蓝桥杯 C语言 天干地支
    天干地支题目 思路分析1.我们首先定义两个二维数组,将天干和地支分别录入,或者建立两个指针录入天干地支2.选取一个年份作为基准,在这里选择的是2020年庚子年3.此时输入的年份便被分为三个部分:小于2020年,2020年,大于2020年4.小于2020年部分减去2020后得到一个负数,我们需要将......
  • CSS mask的用法
    CSS的mask属性可以让你在元素上添加一个遮罩蒙层,从而有助于创建各种有趣的效果。下面是一些mask属性的常见用法:1.使用图片遮罩img{-webkit-mask-image:url(mask.png);mask-image:url(mask.png);}以上代码将会使用mask.png作为遮罩。这将会使图片只在遮罩区域内可见......
  • 常用的占位符用法
    //%s字符串类型Stringstring1=String.format("你好呀,我是%s,请问你是%s吗?","张三","李四");System.out.println("string1="+string1);//%c字符类型Stringstring2=String.format("字母%c&......
  • odoo context上下文用法总结
    环境odoo-14.0.post20221212.tarcontext用法总结获取上下文>>>self.env.context#返回字典数据,等价于self._context{'lang':'en_US','tz':'Europe/Brussels'}>>>self._context{'lang':'en_US','......