当前位置: 首页 > news >正文

c++ 变量常量指针练习题

Q1:在win32 x86模式下,int *p; int **pp; double *q; 请说明p、pp、q各占几个字节的内存单元。

p 占 4 个字节

pp 占 4 个字节

q 占 4 个字节

Q2常量1、1.0、“1”的数据类型是什么?

1 是 整形 int

1.0 是 浮点型 double

“1” 是 const char *

Q3 语句:short int a[10]; short int *p = a; sizeof(a)等于sizeof§吗?为什么?

不一样, sizeof(a) 计算的是开辟的数组的空间大小 ,为 20 字节

而sizeof§ 计算的是short 类型的指针 p 本身的占用的空间的大小,为 4 个字节

Q4

若给出声明: 
char c, *pc;
const char cc = 'a'; 
const char *pcc; 
char *const cpc = &c; 
const char * const cpcc = &cc; 
char *const *pcpc; 
则下面的赋值哪些是合法的?哪些是非法的?为什么? 
(1) c = cc; 			(10) *pc = "ABCD"[2]; 
(2) cc = c; 			(11) cc = 'a'; 
(3) pcc = &c; 			(12) *cpc = *pc; 
(4) pcc = &cc; 			(13) pc = *pcpc; 
(5) pc = &c; 			(14) **pcpc = *pc; 
(6) pc = &cc; 			(15) *pc = **pcpc; 
(7) pc = pcc; 			(16) *pcc = 'b'; 
(8) pc = cpcc; 			(17) *pcpc = 'c'; 
(9) cpc = pc; 			(18) *cpcc = 'd';

(1) 合法 , c 不是 const 类型的变量 ,可以赋值

(2) 非法 , cc 是 const 类型的变量,不可以赋值

(3) 合法 , pcc 是一个常量指针,可以更改指向的对象

(4) 合法, pcc 是一个常量指针,可以更改指向的对象

(5) 合法 , 类型匹配

(6) 非法 , pc 是一个 char 类型的 指针, 而 cc 是常量,类型不匹配

(7) **非法 **, 类型不匹配,pc要求指向char类型的变量,不能用指向const char*类型的pcc赋值。

(8) 非法 , 类型不匹配,pc要求指向char类型的变量,不能用指向const char*类型的cpcc赋值。

(9) **非法 **, cpc 是一个指针常量,无法修改指针的指向

(10)合法 , pc指向的是非const类型的变量,可以赋值,等价于*pc=’C’

(11) 非法 , 常量 cc 无法被重新赋值

(12) 合法 , 指针常量 可以 为所指向的对象重新赋值

(13) 合法 ,pc是非const类型的指针变量,可以用char 类型的值pcpc赋值

(14) 合法 , pc是非const类型的指针变量,可以用char 类型的值pcpc赋值

(15) **合法 ** ,*pc代表的是非const类型的字符变量,可以任何字符类型的值赋值。

(16) 非法 , *pcc代表的字符是const类型的字符变量,不能赋值。

(17) 非法 , *pcpc代表的是const类型的指针变量,不能赋值。

(18) 非法 , *cpcc代表的是const类型的只读变量,不能赋值。

Q5

C按优先级和结合性解释类型,下述声明是什么意思? 
(1) typedef void VF_PC_RI(char*, int &);
(2) typedef VF_PC_RI* P_VF_PC_RI; 
(3) typedef int &RIFFII(int, int); 
(4) extern VF_PC_RI funca; 
(5) extern P_VF_PC_RI ptra; 
(6) extern void func1 (P_VF_PC_RI *); 
(7) extern P_VF_PC_RI func2 (int c); 
(8) P_VF_PC_RI func3 (P_VF_PC_RI a); 
(9) typedef void (*(**VF_PA_P_PF_V(void))[ ]) (const int);
(10) int *(*p)[4][2];

(1) 定义了一个名为 VF_PC_RI 的函数类型,该函数接受一个 char* 类型的参数和一个 int 引用作为参数,而且这个函数没有返回值

(2) 定义了一个 名为P_VF_PC_RI的类型,该类型定义了一个指向VF_PC_RI类型的指针。

(3) 定义了一个名叫 RIFFII 的类型, 该类型定义了一个参数为(int , int ),返回值 为 int 类型的引用的一个函数

(4) 声明了一个名为 funca 的函数

(5) 声明了一个类型为P_VF_PC_RI的指针变量ptra

(6) 声明了一个名为 func1 的函数,该函数接受一个指向 P_VF_PC_RI 类型指针的参数,返回值 为void

(7) 声明了一个名为 func2 的函数,该函数接受一个 int 参数并返回一个指向 VF_PC_RI 类型函数的指针

(8) 声明了一个名为 func3 的函数,该函数接受一个 P_VF_PC_RI 类型的参数并返回一个 P_VF_PC_RI 类型的值

(9) 定义了一个名为 VF_PA_P_PF_V 的函数,该函数不接受参数并返回一个指向指针数组的指针,其中指针数组的元素是指向函数的指针,这些函数接受一个 const int 参数并返回 void

(10) 定义了一个p 的指针,这个指针指向 4 个元素的数组,每个数组包含2个元素,这两个元素的值都是 int *

Q6

下面g()函数的重载声明和定义是否会导致编译错误? 
float g(int); 
int g(int); 
int g(int, int y=3); 
int g(int, …); 
int i = g(8);

会导致编译错误

  • 不能以返回值的不同作为重载的条件 float g(int) 和 int g(int) 冲突
  • g(8) 在调用的时候出现二义性,无法确定是调用int g(int, int y=3)还是int g(int, L)

**Q7 **定义函数求n(n>=1)个double类型的数的最大值double max1(int n, …)。注意:如果编程测试,建议使用vs2019 ,并且一定要在x86模式(不要在x64)。有兴趣的同学,可以在vs2019-x64下测试,分析为什么得不到正确的结果。

double maxl(int n,...)
{double* p = (double*)(&n + 1);double max = p[0];for (int k = 1; k < n; k++){if (max < p[k]){max = p[k];}}return max;
}

用 x64 模式下代码能够运行但是得不到正确的结果,x86 是 64 位,会给每个变量分配 8 个字节,若 n 的地址 为 0x 0000 ,则 下一个 double 的 首地址为 0x 0008 , 但是 double* p = (double*)(&n + 1) 这句话 的意思是 p 的取值到 n 的地址 + sizeof(int) ,就是取值到 0x 0004 ,不能正确取值到 double 的地址,如果 改为 double* * p = (double*)(&n + 2) ,就能正确取值到 0x0008 ,或者 p = (double *)((char *)&n + 8) ,这个等价于 对 n 的地址增加 8 个 字节,也可以取值取到 0x0008

下面的代码都是可以的

	double* p = (double*)((char*)&n + 8);double* p = (double*)((short *)&n + 4);double* p = (double*)((int*)&n + 2);double* p = (double*)((double*)&n + 1);

相关文章:

c++ 变量常量指针练习题

Q1:在win32 x86模式下&#xff0c;int *p; int **pp; double *q; 请说明p、pp、q各占几个字节的内存单元。 p 占 4 个字节 pp 占 4 个字节 q 占 4 个字节 Q2常量1、1.0、“1”的数据类型是什么&#xff1f; 1 是 整形 int 1.0 是 浮点型 double “1” 是 const char * Q3 语句&…...

Linux底层基础知识

一.汇编&#xff0c;C语言&#xff0c;C&#xff0c;JAVA之间的关系 汇编&#xff0c;C语言&#xff0c;C可以通过不同的编译器&#xff0c;编译成机器码。而java只能由Java虚拟机识别。Java虚拟机可以看成一个操作系统&#xff0c;Java虚拟机是由汇编&#xff0c;C&#xff0c…...

JUC并发编程--------线程安全篇

目录 什么是线程安全性问题&#xff1f; 如何实现线程安全&#xff1f; 1、线程封闭 2、无状态的类 3、让类不可变 4、加锁和CAS 并发环境下的线程安全问题有哪些&#xff1f; 1、死锁 2、活锁 3、线程饥饿 什么是线程安全性问题&#xff1f; 我们可以这么理解&#…...

机器视觉之Basler工业相机使用和配置方法(C++)

basler工业相机做双目视觉用&#xff0c;出现很多问题记录一下&#xff1a; 首先是多看手册&#xff1a;https://zh.docs.baslerweb.com/software 手册内有所有的源码和参考示例&#xff0c;实际上在使用过程中&#xff0c;大部分都是这些源码&#xff0c;具体项目选择对应的…...

Centos nginx配置文档

1、安装nginx: yum install nginx 2、Nginx常用命令 查看版本:nginx -v 启动:nginx -c /etc/nginx/nginx.conf 重新加载配置:nginx -s reload 停止:nginx -s stop 3、Nginx反向代理配置 nginx配置详解 1、Nginx配置图 详情可以查看:http://nginx.org/ru/docs/example…...

2023/9/14 -- C++/QT

作业&#xff1a; 仿照Vector实现MyVector&#xff0c;最主要实现二倍扩容 #include <iostream>using namespace std;template <typename T> class MyVector { private:T *data;size_t size;size_t V_capacity; public://无参构造MyVector():data(nullptr),size(…...

golang在goland编译时获取环境变量失效

在golang中&#xff0c; 我们通常使用os包来获取环境变量&#xff0c;如&#xff1a; os.Getenv() os.LookupEnv() 等。 但如果我们使用goland编译器&#xff0c;在编译是&#xff0c;这时操作环境变量&#xff0c;会发现os包读取到的环境变量值不变&#xff1a; 新增后&am…...

一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了

一款非常容易上手的报表工具&#xff0c;简单操作实现BI炫酷界面数据展示&#xff0c;驱动支持众多不同类型的数据库&#xff0c;可视化神器&#xff0c;免开源了。 在互联网数据大爆炸的这几年&#xff0c;各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的…...

蓝桥杯 题库 简单 每日十题 day3

01 约数个数 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 1200000 有多少个约数&#xff08;只计算正约数&#xff09;。 解题思路 枚举&#xff0c;从1开始一直到1200000本身都作为1200000的除数&#xff0c;…...

基于SSM+Vue的高校实验室管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

C语言天花板——指针(初阶)

&#x1f320;&#x1f320;&#x1f320; 大家在刚刚接触C语言的时候就肯定听说过&#xff0c;指针的重要性以及难度等级&#xff0c;以至于经常“谈虎色变”&#xff0c;但是今天我来带大家走进指针的奇妙世界。&#x1f387;&#x1f387;&#x1f387; 一、什么是指针&…...

关于第一届全球电子纸创新应用金奖征集评选及报名指南

重要通知 &#xff5c;关于第一届全球电子纸创新应用金奖征集评选及报名指南https://mp.weixin.qq.com/s/RWsZtmJ20-NZXMG0k0rwPA?wxwork_useridEPIA 从2004年&#xff0c;Sony推出全球首款电纸书阅读器至今20载&#xff0c;这期间&#xff0c;到底诞生了多少种创新产品&#…...

idea搭建项目找不到Tomcat

idea搭建项目找不到Tomcat_idea没有tomcat配置项_ZYRL的博客-CSDN博客...

类和对象三大特性之继承

全文目录 继承的概念定义格式继承关系和访问限定符final 基类和派生类对象赋值转换继承中的作用域派生类的六个默认成员函数构造函数拷贝构造函数operator析构函数 友元和静态成员友元静态成员 各种继承形式菱形继承虚继承菱形虚拟继承对象模型 继承和组合 继承的概念 通过继承…...

Debian 12安装Docker

1.更新系统包 #apt update 2.安装依赖包 #apt install apt-transport-https ca-certificates curl gnupg lsb-release 3.添加Docker源 &#xff08;1&#xff09;添加Docker 官方GPG密钥 #curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/s…...

小谈设计模式(4)—单一职责原则

小谈设计模式&#xff08;4&#xff09;—单一职责原则 专栏介绍专栏地址专栏介绍 单一职责原则核心思想职责的划分单一变化原则高内聚性低耦合性核心总结 举例图书类&#xff08;Book&#xff09;用户类&#xff08;User&#xff09;图书管理类&#xff08;Library&#xff09…...

ATF(TF-A) EL3 SPMC威胁模型-安全检测与评估

安全之安全(security)博客目录导读 ATF(TF-A) 威胁模型汇总 目录 一、简介 二、评估目标 1、数据流图 三、威胁分析 1、信任边界 2、资产 3、威胁代理 4、威胁类型 5、威胁评估 5.1 端点在直接请求/响应调用中模拟发送方FF-A ID 5.2 端点在直接请求/响应调用中模拟…...

AI绘画Stable Diffusion原理之扩散模型DDPM

前言 传送门&#xff1a; stable diffusion&#xff1a;Git&#xff5c;论文 stable-diffusion-webui&#xff1a;Git Google Colab Notebook部署stable-diffusion-webui&#xff1a;Git kaggle Notebook部署stable-diffusion-webui&#xff1a;Git AI绘画&#xff0c;输入一段…...

NSS [西湖论剑 2022]real_ez_node

NSS [西湖论剑 2022]real_ez_node 考点&#xff1a;ejs原型链污染、NodeJS 中 Unicode 字符损坏导致的 HTTP 拆分攻击。 开题。 附件start.sh。flag位置在根目录下/flag.txt app.js(这个没多大用) var createError require(http-errors); var express require(express); v…...

MySQL常用函数集锦 --- 字符串|数值|日期|流程函数总结

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、字符…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...