C语言--const修饰指针解析】的更多相关文章

      这种例子在我们平时编程时可能会很少用,但是在面试时被问的可能性就很大了. 用const修饰指针,常见的情况可以分为四种: 1.const int *p; // p 可变,p 指向的对象不可变2.int const *p; // p 可变,p 指向的对象不可变3.int *const p; // p 不可变,p 指向的对象可变4.const int *const p; //指针p 和p 指向的对象都不可变       可以看到,这四种情况面对的问题是p的值和p指向的值是否可以修改. 下…
关于const修饰指针的情况,一般分为如下4种情况: ; const int *a =&b; //情况1 int const *a =&b; //情况2 int* const a =&b; //情况3 const int* const a =&b; //情况4 如何区别呢? 如果const 位于星号的左侧,则const 就是用来修饰指针所指向的变量,即指针指向为常量: 如果const 位于星号的右侧,const就是修饰指针本身,即指针本身是常量. 1.情况1和2相同,都是指…
const这块的难点 const修饰指针有以下的几种形式 ,不同的形式 它的意义不一样. 形式1: int a=23: const int *p=&a: a是int型,&a是int *型的,要把int *型的赋给 const int *型的.涉及到了点类型转换. 问 const int *p=&a:这个操作,导致了谁不能被操纵了?! 这里修饰的是 *p,所以 *p 如果重新赋值是不可以的!! *p不能变,但是p是可以变的. 第二种: int const * p 这种情况和 cons…
const修饰指针,一般分为如下四种情况: int b = 500; const int *a = &b;   //情况1 int const *a = &b //        2 int* const a = &b //  3 const int* const a = &b//  4 如何区别呢?1)先看情况1.如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量:如果const位于星号的右侧,const就是修饰指针本身,即指针本身是…
const修饰指针 1.const修饰指针 (常量指针)常量的指针 const int *p = &a; const修饰的是*p(表示内容为常量),不是p(指针) 指针指向的地址可以改,但指针指向的值不可以改,这里是指向的值不可改是不能通过*p改,但是可以通过a改, p = &b; (对) * p = 20 (错) 2.const修饰常量 (指针常量)指针是常量 int * const p = &a; const修饰的是p(表示指针是常量) p指向的地址不可以改变,但是该地址内存放…
在本文中呢,主要讲解四个方面,即:常量数据的与否和常量指针的与否中const如何对指针进行修饰: 1.指向非常量数据的常量指针 对于一个指向非常量数据的常量指针,我们应该清楚的知道,在这我们注重的是指针常量,因此,指针始终指向一个内存地址,即该指针存储的地址数据不变,同时也可以通过此指针进行对应存储地址的数据修改,同时需要注意的是,时刻谨记声明为const的指针在声明时必须被初始化.废话不多说,直接上程序测试: //本程序测试指向非常量数据的常量指针 //意在使得大家清楚 const 在修饰指针…
当用const进行修饰时,根据const位置的不同有三种不同效果. 判断的标准是:const修饰谁,谁的内容就是不可变的. 1 const int *p = &a; const修饰*p, *p不可变,p是指针,*p是指针p指向的内存单元里的内容,*p不可变也就是p指向的内存单元里的内容是不可变的. PS: 这儿*p是不可变的,但是p是可变的,就是p指向的内存单元或者说变量是可以变的,但是p指向谁,谁的值就不可变. 不可变指的是不能用*p改变a的值,但是a自己或者别的指针还是可以修改a的值. in…
//const与指针 #include<stdio.h> #include<stdlib.h> void main(){ ; ; const int *p; p = &num1; //p可以变化 p = &num2; //p可以变化 //*p = 5; 报错 这表明p指向一个常量,这个指针不可以改变指向的数据,可以改变p的值(即指向谁) int const *p1;//等价于const int *p; /*int * const p2;---此时报错,p2是个常量,…
1.指向常量的指针 顾名思义,一个指针指向const对象,则称它为指向常量的指针. ; int* ptr=&a; //错误 const int* ptr=&a; //必须用const来说明ptr是一个指向常量的指针 但是没有规定ptr指向的对象必须是一个常量,所谓指向常量的指针只是要求不能通过它来改变对象的值,那个对象是可以通过其他途径来改变的: ; const int* ptr = &c; int const* ptr = &c; //这样也是可以的,只要*在const右…
const修饰基本数据类型 #include <iostream> using namespace std; void main(){ const int a = 1; const char b = 'k'; const float c = 3.14f; //a = 2; //b = 'n'; //c = 1.2f; } const修饰基本类型表示这些类型为常量,不能再修改或赋值.还有需要注意的是3.14默认为double类型,如果用float变量保存的话应该写成float c = 3.14f…
指针指向谁,就把谁的地址赋给指针,指针变量和指针指向的内存变量是不一样的.不停的给指针赋值,相当于是不断的改变指针的指向. 在开发中要避免野指针的存在,在指针使用完毕之后,记得要给指针赋值成为NULL. *就像一把钥匙,拿着指针变量中的地址区修改对应内存中的数值. 指针做函数参数是学习C语言中的核心内容. 间接赋值的三个条件 1,存在两个变量, 2,进行取地址赋值 3,,用*p来进行内存空间内容的修改. 指针的输入特性和输出特性. 字符串的两头堵模型. 字符串指向的内存空间如果是在常量区是不能进…
在C++里,const修饰指针有以下三种情况 (1)指针常量:即指向常量的指针 const  int *p或者int const *p const在*前,,可以这样理解它的功能,因为const在*前,所以p指向的这个int变量对于*p来说是const的,即不能通过*p改变这个变量的值,但是变量本身可以随便改变自己的值.另外也可以改变p的指向. 例: int x=2; int y=3; const int *p=&x; *p=4;   //错误,不能通过*p改变变量的值 x=4;    //可以,…
const int a; int const a; 这两个写法是等同的,表示a是一个int常量. 简记:const后面是什么就限定什么(因为C++标准规定,const关键字放在类型或变量名之前等价的).比如const int *p就是限定(*p),(*p)就是p指向的那段内存不能变,p的值可以改变:如果是int* const p就是限定p指针的值(p指向的对象). , b=; //声明变量. int *p; p=&a; //声明指针. *p=; 则const int *p限定(*p),*p不能变…
const修饰符 使用const修饰变量时,该变量的值不可修改,因此需要初始化. 例如 const int s = 0: 此时s为值不可变的变量. 那么基于此,当const修饰指针时的情况有三种: (1)const int *p: 此时const修饰的是 *p 而非 p,因此,*p的值不可变,而p的值是可变的,所以可不对p进行初始化. 例如, int s = 0,t = 1; const int *p; p = &s; cout<<*p<<endl; p = &t;…
c++ const 修饰变量位置含义 const 修饰成员变量 const修饰指针变量时: 只有一个const,如果const位于*左侧,表示指针所指数据是常量,也就是指向常量的指针,不能通过解引用修改该数据:指针本身是变量,可以指向其他的内存单元. const int* a; //表明a所指向的量为常量 只有一个const,如果const位于*右侧,表示指针本身是常量,也就是常指针,不能指向其他内存地址:指针所指的数据可以修改. int* const a; //表明a是常量,不能更改a的指向,…
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 #include <stdlib.h> 5 #include <math.h> 6 #include <time.h> 7 #include <Windows.h> 8 9 #define N 10 //定义常量常用方法 10 11 //const修饰常量 12 int main…
//区别⑦:三目运算符(C++版本) #include<iostream> using namespace std; //三目运算符 C语言返回变量的值 C++语言是返回变量本身 void main(){ ; ; a < b ? a : b = ; //C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方 //注意: //三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用 //(a < b ? 1 : b) = 30; system("paus…
1.字符串输出输入函数 读入字符串的方法: 1) scanf 特点:不能接收空格 2) gets 特点:可以接受含有空格的字符串 ,不安全 3) fgets(); 特点:可以帮我们自动根据数组的长度截取适当的长度保存,安全 如果输入的长度大于数组的长度,自动将数组最后一个元素保存为\0 如果输入的长度小于数组的长度,会自动先保存\n,再保存\0   使用格式:fgets(ch,sizeof(ch),stdin); 输出字符串的方法: 1) printf() %s   缺点:不能自动换行 2) p…
问题1:const什么时候为只读变量?什么时候是常量? const常量的判别准则: a.只有用字面量初始化的const常量才会进入符号表(直接初始化过的const为常量) b.被使用其他变量初始化的const常量仍然是只读变量(间接初始化的const为只读变量) c.被volatile修饰的const常量不会进入符号表(volatile:易变的.每次都要去内存中取出值.所以也是只读变量.voaltile易变的在这里决定了cosnst不可能是一个常量:const则说明在当前的作用域当中,修饰的变量…
在c程序中,我们可能经常会使用到指针之间的赋值. 传统的赋值操作: char *cp = "c"; const char *ccp; ccp = cp; printf("*ccp:%c",*ccp); 会正常打印出*cpp所指的字符.但是下面的这段代码,就会出现问题: char **c = &cp; const char **cc; cc = c; printf("**cc:%c",**cc); 编译的时候提示,出现错误: >---…
如果输入参数采用“指针传递”,那么加 const 修饰可以防止意外地改动该指针,起 到保护作用. #include <iostream> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; //定义栈的尺寸 ; //定义处理栈的类模板接口 template <class T>…
大家都知道如下代码中,被const限定的a是不可以被直接修改的 void main() { const int a = 3; a=1; } 在C++中const修饰的常量,不能被直接修改,但是可以通过指针进行间接修改 来看下面的例子: 运行后输出 5 3 单步执行,利用内存窗口进行查看,未修改前a为3    当利用指针间接修改a后,a在内存中显示5        原意是想通过指针修改const常量a的值,运行后发现输出的a依然是3,a的值表面上并没有被改变. 但是查看内存窗口,发现a已经被改变,…
1.当程序中存在多个对象的时候,如何确定这些对象的析构顺序? 单个对象 单个对象创建时构造函数的调用顺序 a.调用父类的构造函数 b.调用成员变量的构造函数(调用顺序与声明顺序相同) c.调用类自身的构造函数 析构函数与对应的构造函数的调用顺序相反 多个对象 多个对象时,析构函数与构造顺序相反 eg:这端代码就可以解释上述 #include <stdio.h> class Member { const char *ms; //这里是const指针 public: Member(const ch…
C语言之漫谈指针(下) 在上节我们讲到了一些关于指针的基础知识: 详见:C语言之漫谈指针(上) 本节大纲: 零.小tips 一.字符指针 二.指针数组与数组指针 三.数组传参与指针传参 四.函数指针及函数指针数组 五.回调函数 六.例题讲解 零.小tips 在正式开始下节之前,我们先来穿插两个小tips: 1.打印函数哪家强! //假设有下面两个打印函数,我们应该首选哪个? struct person { char name[20]; int age; char sex[5]; char tel…
<OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用const修饰的函数形参 直接修饰 一个形如 int Minus(const int a, const int b, int testCase); 的函数,const的意义是什么呢? 答:参数a被const修饰,说明在Minus函数内,编译器不允许a被别的变量(例如x)赋值(修改).参数b同理. 如果你写了a…
在C语言中不可改变的数据(量)就是常量    在C语言中有三种常量        字面量(直接量),就是直接写出来的,从写法上就可以看出值与类型等,例如:19,123.456等        名字常量(宏定义,宏替换),语法:            在代码一开始的位置写上                #define 名字 值            运行原理说明:程序要经过:编码->编译->链接->运行                    在编译的过程中,又分为一开始的预编译     …
const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰 的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修饰局部变量. 例: void func(){ const int a=0; } 首先,我们先把const这个单词忽略不看,那么a是一个int类型的局部自动变量, 我们给它赋予初始值0. 然后再看const. const作为一个类型限定词,和int有相同的地位. const int a; int const a; 是等价的.于是此…
C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一枚,难免出错,还望各位大牛不吝赐教. 首先,来看看const的基本含义.在 C/C++ 语言中,const关键字是一种修饰符.所谓“修饰符”,就是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码.就 const…
原文:话说C语言const用法 const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修饰局部变量.例:void func(){const int a=0;} 首先,我们先把const这个单词忽略不看,那么a是一个int类型的局部自动变量,我们给它赋予初始值0. 然后再看const. const作为一个类型限定词,和int有相同的地位.const int a;int const a;是…
在C语言程序中,const关键字也是经常会用到的一个关键字,那么使用const关键字的目的是什么呢?事实上,在程序中使用const关键字的主要目的就是为了向使用者传递设计者的一些意图. 事实上,无论我们是使用const关键字声明变量还是声明参数,其目的都是为了告诉使用者这个变量或者参数的应用目的.合理地使用关键字const 可以使编译器有效地保护那些不希望被改变的变量或参数,防止其无意中被代码修改.所以使用const关键字可以避免一些不必要的错误. 我们已经说明了const关键字的作用,接下来我…