×

哪个是常量指针

哪个是常量指针(C语言中,该怎样区分指针常量和指针变量)

admin admin 发表于2024-09-21 16:35:19 浏览1 评论0

抢沙发发表评论

各位老铁们好,相信很多人对哪个是常量指针都不是特别的了解,因此呢,今天就来为大家分享下关于哪个是常量指针以及C语言中,该怎样区分指针常量和指针变量的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录

C语言中,该怎样区分指针常量和指针变量

你错了 ,s1是指针常量,s2是指针变量,因为s1代表一个数组名,而数组名就代表这个数组的首地址,它是不能改变的,即不能这样 : s1=s1+1; s2是指针变量,char *s2="DEF" 代表这个指针变量指向这个字符串,也就是s2就代表了它的首地址。可以改变指针变量的指向。

一个c++小问题 指针常量 常量指针 常指针 常指针常量的具体区别最后用题演示!!

#include 《iostream》using namespace std;int main(){ const int a=18; const int *p=&a // 这个是指向常量的指针,指针指向一个常量,可以指针可以自加 p++; //合法 int const *q=&a // 这个和上面是一个意思 int b=19; int * const r=&b //这个就是常量指针(常指针),不能自加,并且有初始化 //r++; //编译出错 const int * const t=&b //这个就是指向常量的常指针,并且要初始化,用变量初始化 //t++; //编译出错 p=&b //const指针可以指向const和非const对象 //r=&a //非const指针不能指向cosnt对象,编译出错return 0;} 这是我上次回答一个网友的内容,楼主可以参考一下

error C2440: ’initializing’ : cannot convert from ’const int *’ to ’int *const ’

这句话的意思是:两个变量的类型不同,不能进行初始化赋值

C语言中常见的两个const修饰指针变量的定义方式,经常让人傻傻分不清楚:

  • const int *p; 

  • int * const p;

首先说明,这两个定义,定义出的p都是指针!

但这两个指针变量定义,又都是定义一个常量,常量是指的哪个?

Bjarne在他的The C++ Programming Language 里面给出过一个助记的方法:  

把一个声明从右向左读,* 读成 pointer to:

const char * p;  

p is a pointer to char const ;   //直译:p是指针,指向字符类型常量

char  * const p;

p is a const pointer to char  //直译:p是常量(指针) ,指向字符类型

可结合以下代码,进行上述的理解与练习:

#include 《iostream 》using namespace std;int main(void){int x=0,y=1;const int *p=&x ; //p可变,p中的内容*p不可变//*p=y; 试图改变p中的内容,编译报错:error C2166: l-value specifies const object 左值是常量p=&y; //p可以指向别的地址int * const pp=&x; //p不可变,p中的内容*p可变//pp=&y; 试图修改p的指向,编译报错:error C2166: l-value specifies const object 左值是常量*pp=y; //p中的内容,可以改变为别的值return 0;}

还有一种定义方式,表示两者都不可改变:

 形式:const int * const pTmp ;

 含义:pTmp不可修改,pTmp所指对象也不能修改。

c语言常量指针

(1)先说const long *p,p是一个指向常量的指针,被指向的这个常量是long类型;p本身是可以再被赋值的,可以改变的,是个变量。(2)long *const p;const是修饰p的,p是一个指针型的常量,常量是不能改变的,也就是说p不能再被赋值,这个指针指向的是一个long类型的值。不知道说的是否明白,有问题可以追问!

关于本次哪个是常量指针和C语言中,该怎样区分指针常量和指针变量的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。