`
SunnyYoona
  • 浏览: 366758 次
社区版块
存档分类
最新评论

[面试题]const与指针

阅读更多

(1)const int *p; int const *p2;

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

int main(){
    int a = 3;
    int b = 4;
    const int *p;
    p= &a;
    int const *p2;
    p2 = &b;
    //*p = 5; error: assignment of read-only location '* p'
    //*p2 = 5; error: assignment of read-only location '* p2'
    p = &b;
    printf("%d\n",*p);
    //综上可以知道:指针不是常量,指针所指向的内存区域是常量。

}

*p = 5;

报错:error: assignment of read-only location '* p'

*p2 = 5 ;

报错:error: assignment of read-only location '* p2'

意思很明确:*p *p2都是常量不可以更改。指针p和p2都是变量可以随意指向任意地址。p = &a; p = &c;都可以。

(2)int *const p3

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

int main(){
    int a = 3;
    int b = 4;
    //int *const p3 error:uninitialized const 'p3' 只能在声明的时候就给它赋初值,否则还是会报错的
    int *const p3 = &a;
    //p3 = &b; error: assignment of read-only variable 'p3'
    *p3 = 8;
    printf("%d\n",*p3);
    //综上可以知道:指针是常量,所指向的内存区域是不能更改的。指针所指向的内存区域不是常量,可以修改。
}

int *const p3;

报错:error:uninitialized const 'p3' 没有对p3进行初始化。

p3 = &b;

报错:error: assignment of read-only variable 'p3' 指针p3是常量,不可以更改指针指向的地址。

*p3 = 8;

*p3是变量,可以更改指针p3指向的值。

综上可以知道:指针p3是常量,不可以更改指针指向的地址。*p3是变量,即指针指向的是变量,可以更改指针p3指向的值。

(3)const int *const p3

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

int main(){
    int a = 3;
    int b = 4;
    const int *const p3 = &a;
    //int *const p3 error:uninitialized const 'p3'
    //p3 = &b; error: assignment of read-only variable 'p3'
    //*p3 = 8; error: assignment of read-only location '*(const int*)p3'
    printf("%d\n",*p3);
}

int *const p3;

报错:error:uninitialized const 'p3' 没有对p3进行初始化。

p3 = &b;

报错:error: assignment of read-only variable 'p3' 指针p3是常量,不可以更改指针指向的地址。

*p3 = 8;

报错:error: assignment of read-only location '* (const int*)p' *p3是常量,不可以更改指针p3指向的值。

综上可以知道:指针p3是常量,不可以更改指针指向的地址。*p3是常量,即指针指向的是常量,不可以更改指针p3指向的值。


具体总结:

int* p = 4; //non-const pointer,non-constdata
const char* p = &p; //non-constpointer,const data;
char* const p = &p;//constpointer,non-const data;
const char* const p = &p; //constpointer,const data;

关于定义的阅读,一直以为这段解释很不错了已经,即以*和const的相对位置来判断:
const语法虽然变化多端,但并不莫测高深。如果关键字const出现在*左边,表示被指物是常量;如果出现在*右边,表示指针自身是常量;如果出现在*两边,表示被指物和指针两者都是常量。
如果被指物是常量,有些程序员会将关键字const写在类型之前,有些人会把它写在类型之后、*之前。两种写法的意义相同,所以下列两个定义相同:

const Widget* w;
Widget const* w;

其实很简单,const和*的优先级相同
且是从右相左读的,即“右左法则”
其实const只是限定某个地址存储的内容不可修改
比如int*p;读作p为指针,指向int,所以p为指向int的指针
int*const p;读作p为常量,是指针,指向int,所以p为指向int的常量指针, p不可修改
int const *p;p为指针,指向常量,为int,所以p为指向int常量的指针, *p不可修改
int ** const p; p为常量,指向指针,指针指向int,所以p为指向int型指针的常量指针,p不可修改
int const**p; p为指针,指向指针,指针指向常量int,所以p为指针,指向一个指向int常量的指针, **p为int,不可修改
int * const *p ; p为指针,指向常量,该常量为指针,指向int,所以p为指针,指向一个常量指针,*p为指针,不可修改
int ** const *p; p为指针,指向常量,常量为指向指针的指针,p为指针,指向常量型指针的指针,*p为指向指针的指针,不可修改
int * const **p; p为指针,指向一个指针1,指针1指向一个常量,常量为指向int的指针,即p为指针,指向一个指向常量指针的指针, **p为指向一个int的指针,不可修改




分享到:
评论

相关推荐

    c/C++面试题大全--96页

    本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。  许多面试题看似简单,却需要深厚的基本功才能给出...

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    面试题5:简述指针常量与常量指针区别 面试题6:写出以下代码的输出结果 面试题7:找出代码的错误 5.3 指针和数组 面试题8:写出代码的输出结果 面试题9:请问这段程序有问题吗 面试题10:a和&a有什么区别 面试题11...

    c 语言面试题10题

    首先, const char c 和 char const c 是等价的.再来看const修饰指针的情况. const char* p : 因为const 修饰符在

    C语言面试题-求职必备收藏备用.docx

    以下是一些常见的C语言面试题,这些问题覆盖了基本语法、指针、内存管理、数据结构等多个方面: 1. **基础语法** - C语言中的基本数据类型有哪些? - `#include &lt;filename.h&gt;` 和 `#include "filename.h"` 有什么...

    30道 C++ 常见面试题

    这个PDF文档是一份精心整理的C++常见面试题集。文档包含了30个经典的C++面试问题,涵盖了C++的基础知识、面向对象特性、内存管理、类型安全、函数调用和返回值等多个方面。这些问题不仅适合用于面试准备,也有助于...

    C语言中的一些算法和面试题

    C语言作为一种经典的程序设计语言,在算法和面试题方面有着广泛的应用。掌握C语言算法和面试题不仅能够加深对语言本身的理解,更能够培养逻辑思维能力和解决问题的能力,为今后的工作和面试打下坚实的基础。 在算法...

    摩托罗拉C++面试题

    const 指针仍然存在空指针,并且有可能产生野指针. 总的来说:引用既具有指针的效率,又具有变量使用的方便性和直观性. 5.参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什么; ...

    一些C面试题,希望能对大家有帮助

    c面试题 4. static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。...

    C/C++笔试题(附答案,华为面试题系列)

    2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。 3.描述实时系统的基本特性 在特定...

    23道常见的C语言面试题

    文档内容涵盖了const关键字的使用、指针常量与常量指针的区别、static关键字的作用、全局变量与局部变量的区分、宏定义的作用、内存对齐的概念、inline内联函数的特点、C语言实现面向对象特性的方法、memcpy函数的...

    专业面试题1

    (2)可以有const指针,但是没有const引用 (3)指针可以有多级,但是引用只能是一级(int **p (5)指针的值在初始化后可以改变,即指向其它的存储

    c++面试题基础分享.doc

    c++面试题53个问题 1.C++的三大特性 2.C和C++的区别 3.全局变量和局部变量在内存分配上有何不同 4.static的作用 5.const解释其作用 6.指针和引用的区别 7.智能指针 8.简述深拷贝和浅拷贝的区别 9.编写my_...

    最新名企标准通用C++面试题,

    C++面试题 参考:http://blog.csdn.net/Ghost90/archive/2009/04/22/4099672.aspx 整理:松鼠 时间:2009-5-8 1、const 有什么用途?(请至少说明两种) 答: (1)可以定义 const 常量 (2)const可以修饰函数的...

    c++ 面试题 总结

    C++面试题 1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。 private 也被集成,只事派生类没有访问权限而已 virtual可加可不加 子类的...

    C++复试和面试题汇总

    C++增加了 const 常量、引用、强制类型转换、智能指针、Lambda 匿名 函数、右值引用等新特性,功能语法更为灵活复杂; • C++可复用性高,引入了模板概念,在此基础上实现了 STL 标准模板库, 大大方便了开发...

    嵌入式C语言开发面试题

    这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的。这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下: int *ptr; ptr = (int *)0x67a9; *ptr = 0xaa55...

    【。net 专业】 面试题

    【面试题库网整理 .net 面试题(附答案)(四)】 7. 某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则: (1) 密码单词的最小长度是两个字母,可以相同,也可以不同 ...

    C++ const修饰变量和修饰函数介绍

    关于const最常见的一个面试题是这样的:char *const和const char*有什么区别,大家都知道const修饰符代表的是常量,即const修饰的变量一旦被初始化是不能被更改的,这两个类型一个代表的是指针不可变,一个代表指针...

    程序员面试宝典-第三版(高清带目录)

     第7章 指针与引用  7.1 指针基本问题  7.2 传递动态内存  7.3 函数指针  7.4 指针数组和数组指针  7.5 迷途指针  7.6 指针和句柄  第8章 循环、递归与概率  8.1 递归基础知识  8.2 典型递归问题  8.3 ...

    经典C/C++面试题目大汇总(全附答案).doc

    doc格式,60多页吧,几百道题吧,都有答案吧,看好在下! 部分: 1.求下面函数的返回值(微软) int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } ...

Global site tag (gtag.js) - Google Analytics