首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

指针引用常量的一些“故事”

C++也算是学了有些年头,可惜还是不甚了解,这不,今天对于指针引用常量这三个在C++中处处可见的东西又有些懵里懵懂了,也罢,今天就稍稍学究一下,再尽力整理一番其中的一些“故事”吧,一则帮助自己记忆...常量指针常量“的”指针,指向常量指针,所指内容是不能更改的(read-only),但指针本身是可以修改的    示例:const Object* objPtr、const int *iPtr   2...指针常量指针“的”常量,即本身为常量指针,所指向内容是可以修改的,但指针本身是不可以修改的   示例:Object* const objPtr、int * const iPtr   3. ...引用本身即带有常量语义(类似int& const 的代码表述会引起编译错误),即你无法改变一个已经赋值的引用本身,类似的赋值操作所改变的仅是引用引用(指向)的数据,并不改变引用本身,所以引用非常类似指针常量...对于一般数据类型(基本类型自定义类型)而言,const的位置并不影响其的常量语义,例如const int  int const 都表示该int数据为常量,没有区别。   7.

57010
您找到你想要的搜索结果了吗?
是的
没有找到

C++引用指针以及const常量限定符,能说一二吗?

---- 引用(不能作为对象): 起一个另外的名字而已,好比如*文华今天叫小华,明天别人叫他小文,他还是他。 注意上述中的引用应该是指“小文”这个名字符号,而不是指小文其人,故引用不是对象!...指针引用相比: 指针本身是一个对象,存放某个对象的地址,允许对指针赋值拷贝,在其生命周期内可先后指向不同的对象; 指针无须定义时一定赋确定的值,可用nullptr,0,NULL(头文件cstdlib...(严格说,引用不是对象,不存在常量引用一说法,人们常常喜欢用它时,不过方便描述罢) 引用与const: 例1 const int a=24; const int &b=a;//此时引用引用对应的对象都是常量...p1作为指向常量指针,仅限制其本身不能改变所指对象的值,并不限制所指向对象是否常量 例6 int a=24; int *const p=&a;//p将一直指向a,即p常量指针!...顶层const底层const: 指针作为一个对象,可指向另外一个对象,这两个对象是否常量是独立的。 顶层const:指针本身是const。更一般地,当任意一个对象是常量时,可称为顶层const。

83420

C语言基础知识梳理总结

数据类型:   常量常量包括字面常量、直接常量符号常量;   变量:C语言规定标志符只能由字母、数字下划线三种字符组成,且第一个字符必须是字母或者下划线;必须压迫先定义后使用;每一个变量被定义以确定类型后...,在编译时就能为其分配相应的存储单元;   整数类型:整数常量有十进制、八进制十六进制;“%d”   整形变量:数据在内存中存放形式是以二进制形式存放;有int型、short intlong int...指针的定义及赋值:   类型说明 *变量名  列如 int *p;   区别 int *p=NULL 与 *p=NULL int *p=NULL; //定义指针变量p,并且同时将...int i=10;int *p=&i;*p=NULL; //这时i中的值由10变成了0,而p值本身没变,即内存地址没有改变 指针的大小: int *P;sizeof(p);...int a[10];int *p=&a; //+1,加了sizeof(int)*1个字节,而不是加sizeof(int[10])*1个字节 指针的使用类型   指针形式 数组形式:   int

70410

C指针小结(CC++程序设计)

C指针 相关基础知识:内存的分配(谭浩强版) 1、整型变量的地址与浮点型/字符型变量的地址区别?(整型变量/浮点型变量的区别是什么) 2、int *p,指向整型数据的指针变量。...4、*p指针变量p指向的存储单元(变量) 5、p = &a——>> *p = *&a 6、用指针作函数参数 7、调用函数中,由于虚实结合是采用单向的“值传递”方式,只能从实参向形参传数据,形参值的改变无法回传给实参...原文链接 13、实参形参的结合有一下4种形式: 实参 形参 数组名 数组名 数组名 指针变量 指针变量 数组名 指针变量 指针变量 14、实参数组名a代表一个固定的地址,或者说是指针常量,因此其值不可改变...//  a++ //语法错误,不可改变 15、字符串与指针字符串数组/字符串变量/字符指针 存放字符串。...(1)将变量名作为实参形参。值传递是单向的,实参传给形参,形参改变不影响实参的值。             因为在调用函数时,形参实参不在同一存储单元。

598110

C语言-内联函数、递归函数、指针函数

内联函数 内联函数: 在调用的时候不会进行压栈出栈(不会经历保存地址的过程恢复地址的过程)。 内联函数相当于一个替换的过程。 内联函数设计要注意:内联函数里只能写简单的代码—不能写复杂代码。...字符串数组字符常量定义问题 #include int main() { //p1指向的字符串是在程序编译的时候赋值 char *p1="1234567890"; //指针指向字符常量...0; } 示例2: #include int main() { //p1指向的字符串是在程序编译的时候赋值 char *p1="1234567890"; //指针指向字符常量...语法:int (*p)(int,int); 不支持++—运算符。 指针函数: 本身是函数,表示函数的返回值是指针类型。语法: int *func(int a,int b){} 函数名称就是地址。.../指向函数的指针 p=func; printf("%d\n",func(10,20)); //通过函数名称调用函数 printf("%d\n",p(10,20)); //通过指针调用函数--写法1

65020

C语言字符串与指针-学习二十五

引用一个字符串,可以用以下两种方法: 用字符数组存放一个字符串,可以通过数组名格式声明 “%s” 输出该字符串也可以通过数组名下标引用字符串中一个字符。...用字符指针变量指向一个字符常量,通过字符指针变量引用字符常量。...printf("b = %s\n", b); } image.png 字符指针变量字符数组的比较 用字符数组字符指针变量都能实现字符串的存储运算; 它们二者之间是有区别的,主要有以下几点: 1....例如:a[5]、*(a+5) 如果字符指针变量p=a,则也可以用指针变量带下标的形式地址法引用。...在被调用的函数中可以改变字符串的内容,在主调函数中可以引用改变后的字符串。 例子 用函数调用实现字符串的复制。

23310

const详解

; const int arr [3] = {1,2,3};//与上面等价 限定这些变量作为常量,无法修改 2.2 const修饰指针(*) 2.2.1 常量指针 当为常量指针时,==不可以通过修改所指向的变量的值...int a = 5; const int *p =&a; *p = 20; //error 不可以通过修改所指向的变量的值 int b =20; p = &b; //right 指针可以指向别的变量...int a = 5; int *const p = &a; *p = 20; //right 可以修改所指向变量的值 int b = 10; p = &b; //error 不可以指向别的变量...3.2 const修饰函数返回值 修饰返回值,就是不能修改返回值 对于函数来说,返回值如果是int类型的值,就算用const限定,但是函数调用结束会清楚栈,因此没有必要 如果函数返回值是指针的话,我们加上限定符号...如果函数名、参数、返回值都相同的const成员函数非const成员函数是可以构成重载,那么const对象调用const成员函数,非const对象默认调用非const的成员函数。

19130

c语言之指针与数组知识点随笔

而void类型的指针则可以存放指向任何类型的指针,但它不能引用自身。 运算符优先级:      一元运算符*&的优先级比算术运算符的优先级要高。...第一个函数alloc(n)返回一个指向n个连续字符存储单元的指针,alloc函数的调用者可利用该指针存储字符序列。第二个函数afree(p)释放已分配的存储空间,以便以后重用。...由于函数allocafree处理的对象是指针不是数组下标,因此,调用函数无需知道该数组的名字,这样,可以在包含allocafree的源文件中将该数组声明为static类型,使得它对外不可见。...指针与整数之间不能相互的转换,但0是唯一的例外:常量0可以赋值给指针指针也可以常量0进行比较。程序中常用符号常量NULL代替常量0,这样便于清晰的说明常量0是指针的一个特殊值。...p是指向字符指针,所以每执行一次p++,p就将指向下一个字符的地址,p-s则表示已经检查过的字符数,即字符串的长度。

72520

数组与指针

数组的维数必须用值大于等于1的常量表达式定义。此常量表达式只能包含整型字面值常量、枚举常量或者用常量表达式初始化的整型const对象。...6、指针引用的比较               引用总是指向某个对象,定义引用时没有初始化是错误的;赋值行为的差别,给引用赋值修改的是该引用所管理的对象的值,而并不是使引用与另一个对象关联。...int *p = &ia[2];   //ok:p points to the element indexed by 2 int j = p[1];    //p[1] == ia[3]   ,ok:...p[1] equivalent to *(p + 1) , p[1] is the same element as ia[3] int k = p[-2]; //p[-2] == ia[0]    ok...标准库函数strlen总是假定其参数字符串以null字符结束,当调用该标准库函数时,系统将会从实参ca指向的内存空间开始一直搜索结束符,知道恰好遇到null位置。

1.1K80

C语言:深入理解指针(3)

常量字符串赋值给数组(str1str2),本质上是将这个常量字符串复制一份到数组中,这两个数组其实并不在一个空间,所以str1=str2,并且复制出来的常量字符串是可以修改的。        ...而如果通过字符指针变量指向常量字符串(str3str4),对于常量字符串来说,是只能读不能改的,从内存利用率来说,内容相同的字符串只会保存一份,所以str3=str4....add&add是一样的,因为对于函数来说,函数名是地址,&函数名也是地址 同理*pp也是一样的,函数指针变量是可以不需要解引用。...都是函数的地址,所以对于pf3来说,即使不解引用也是可以调用函数的,但如果解引用了,一定要记得用括号( )将*pf3放在一起!!...( )类型的函数指针,再进行解引用,得到的是函数指针的地址,结尾的( )就是调用0地址处的函数。

8810

面试总结-C++

常量指针指针常量常量指针是一个指针,读成常量指针,指向一个只读变量。如int const *p或const int *p指针常量是一个常量指针的值可以改变。如int *const p。...指针相关问题 指针的相关判断 int *p[10] int (*p)[10] int *p(int) int (*p)(int) ``` - int *p[10...- int (*p)[10]表示数组指针,强调是指针,只有一个变量,是指针类型,不过指向的是一个int类型的数组,这个数组大小是10。...- int (*p)(int)是函数指针,强调是指针,该指针指向的函数具有int类型参数,并且返回值是int类型的。 ##### 指针与数组名 - 二者均可通过增减偏移量来访问数组中的元素。...char a[] = “hello”; a[0] = ‘X’; char *p = “world”; // 注意p 指向常量字符串,指向的是常量p[0] = ‘X’; // 编译器不能发现该错误,运行时错误

2.1K11

C++面试题汇总 (一)

如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。 ...1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。 ...(1)修改内容上的差别  char a[] = “hello”;  a[0] = ‘X’;  char *p = “world”; // 注意p 指向常量字符串  p[0] = ‘X’; // 编译器不能发现该错误...答案:正确 这个 sizeof是编译时运算符,编译时就确定了 ,可以看成机器有关的常量。  题:引用指针有什么区别?  【参考答案】   引用必须被初始化,指针不必。 ...而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应) 。  (2) 有些集成化的调试工具可以对 const 常量进行调试,但是不能对宏常量进行调试。

83220

CC++工程师面试题(指针篇)

什么是函数指针,如何定义函数指针,与指针函数有何区别 参考链接:函数指针指针函数区别 智能指针 参考链接:智能指针的用法 指针常量常量指针常量指针常量 define与const关键字的多种用法...-CSDN博客 nullptr调用成员函数可以吗?...用free或delete释放了内存之后,立即将指针设置为NULL,防止“野指针” c++指针引用的区别 指针可以被重新赋值指向其他变量,而引用一旦绑定到一个变量上就不能再绑定到其他变量上。...endl; return 0; } void *p (无类型指针) 注意在使用 void * 指针时,为了正确解引用指针并获取其指向的值,需要在使用前进行类型转换。...printf("字符变量的值:%c\n", *((char*)p)); return 0; } double free什么情况会造成?

14610

【C++笔试强训】第二天

const修饰所涉及到的问题: 对于常量指针:const int *a 指针指向空间的值不能发生改变,不能通过指针引用修改指针所指空间的值,但是指针的方向可以发生改变 而对于指针常量int *...const a 指针本身是一个常量指针的指向不能发生改变,但是指针所指向空间的值是可以发生改变的,可以通过指针引用改变指针所指空间的值 对于这两个的区分方法: const * 的相对位置: const...在 的左边为常量指针;const在*的右边就表示一个指针常量* p1、p2是常量指针p3是指针常量,选C 3.下面叙述错误的是() char acX[]="abc"; char acY[]={'a'...都是在栈上开辟的空间,可以修改 szXszY都是指针,指向同一个字符串,所以使用同一块空间 zcX是字符串初始化是:abc\0,而acY只有abc,所以acX占用的空间比acY大 对于D:szX...):a先[]结合,表示是一个数组,再*结合,为指针数组,指针指向的是函数,函数有int类型,并返回int

16410

C++常见避坑指南

用strlen(p),得到的是5,与strlen(str)等价。 上面的是sizeofstrlen的区别,也是指针字符串和数组字符串的区别。...const const一般的用法就是修饰变量、引用指针,修饰之后它们就变成了常量,需要注意的是const并未区分出编译期常量运行期常量,并且const只保证了运行时不直接被修改。...此外,const还有下面这种与指针结合的比较绕的用法: int a = 1; const int b = 2; const int* p = &a; int const* p1 = &a; // *p...= 2; // error C3892: “p”: 不能给常量赋值 p = &b; // *p1 = 3; // error C3892: “p1”: 不能给常量赋值 p1 = &b; int* const...p3 = &a; const intint const并无很大区别,都表示: 指向常量指针,可以修改指针本身,但不能通过指针修改所指向的值。

32310

c++面试选择题_C语言经典笔试题

而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。 2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。 20.简述数组与指针的区别?...(1) 修改内容上的差别 char a[] = “hello”; a[0] = ‘X’; char *p = “world”; // 注意p 指向常量字符p[0] = ‘X’; // 编译器不能发现该错误...sizeof(p),p指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。...答案:正确 这个 sizeof是编译时运算符,编译时就确定了 ,可以看成机器有关的常量。 第25题:引用指针有什么区别?...(1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应) 。

1.1K10

指针(1)

3.指针有类型,指针的类型决定+-整数的步长,以及解引用时的权限。 字符指针: 如图,这是最简单的例子,我们利用指针p指向ch的地址,打印时,解引用p就能打印字符g啦。...如果使p指向常量字符串,打印时只打印了a这是为什么呢?其实,当我们用指针指向常量字符串时,指向的是首字符的地址,即a的地址。如果我们想打印字符串,直接用%s即可。...不过需要注意的是,我们不能通过指针p来改变常量字符串的内容,否则就会出现下面的情况 分析:str1str2是两个数组,数组的操作方式是将右边常量字符串的内容拷贝进来,所以他们是两个空间,只是内容相同,...而str3str4是两个指针,编译器在处理的时候,会将相同的常量字符串做成同一个地址,所以,str3str4指向的是同一个常量字符串,所以str3 == str4。...如果我们想调用,只需解引用然后给上实参即可。

7510
领券