C++随记

#include<bits/stdc++.h> using namespace std; int main()

{

char* p = "C Language"; cout<<p<<'\n'; cout<<p+1<<'\n'; cout<<*p<<'\n'; cout<<*(p+2)<<'\n';

}

 

随记

C Language Language

C L

输出结果是p会输入整个字符串,而p+1则会把字符串往前移动一位后进行输出,而p指向的是第一个字母,而p+2)指向的是第三个字母

#include<bits/stdc++.h> using namespace std; int main()

{

char str[] = "C Language", * p = str;//p指向字符串的指针相当于p指向了str[0] cout << p << endl;//输出:C Language cout<<str<<endl;效果相同

cout << p + 2 << endl;//输出:Language 从字符L开始输出直到结束

cout << &str[7] << endl;//输出:age    从第7个元素开始输出

}

 

C Language Language age

这句话和上面一样,p输出的依然是一整个字符串,而p+2也同理,从第三个字符开始输出,而

&str[7]实际上也就是和p+7等价就是从第8个元素开始输出

#include<bits/stdc++.h> using namespace std; int main()

{

char str[]="122344"; char *p=str; while(*p!='\0')

{

cout<<*p<<'\n'; p++;

}

}

 

遍历的一个方法通过\0

#include<iostream> using namespace std; int main()

{

char str[100], * p = str; cin >> str;

while (*p)p++;

cout << "strlen=" << p - str << endl; return 0;

}

 

求字符数组长度的方法

指针不能直接指向一串地址

7. 已知 char* s1= "123", *s2="34";cout<<strcmp(s1,s2);的输出结果为( D )。

(A) true (B) false (C) 1 (D) -1

//strcmp是比较函数,右边小,返回-1

8. 设已定义浮点型变量 data,以二进制方式把 data 的值写入输出文件流对象 outfile 中去, 正确的语句是( C )

  1. outfile.write((double *) &data, sizeof(double)) ;
  2. outfile.write((double *) &data, data) ;
  3. outfile.write((char *) &data, sizeof(double)) ;

//必须是char *类的,后面紧接着sizeof(double)

  1. outfile.write((char *) &data, data) ;

9. 已知 int A = 50; int * const iA = &A; const int B = 80; const int* iB = &B;下面哪条语句

不合法( B )。

(A) *iA = 200; (B) iA = &B; (C) iB = &A; (D) iB = iA

//B改变了指向,这是不行的

//int *const指向是不能改的

#include<bits/stdc++.h> using namespace std; int main()

{

int a[2][3]; int *p[3];

p[0]=&a[2][3];//合法

}

 

结构体指针的一些用法, p->/(*p). 一共有两种解决方法

数组指针和指针数组的引入和介绍

数组指针本质上是一个指针,指向的是一个数组,数组中的每个元素都是某种数据类型的值。

int (*p)[n]

int a[3][4];

int (*p)[4]; p=a;

p++;

//p是一个数组指针,指向了一个包含4int型元素的数组

//将二维数组的首地址赋给p,即a[0]a[0][0]

//跨过第一行,p指向了a[1][0]

指针数组:本质是一个数组,该数组中的每个元素都是一个指针

int a[3][4]; int *p[3];

//p++;

//定义了一个数组,该数组中有3int*指针变量,分别为p[0]p[1]p[2]

//若执行此语句,则数组p指向下一个数组元素

for(int i=0;i<3;i++){

p[i]=a[i];   //数组p中有3个指针,分别指向二维数组a的每一行

}

//补充:同样类似函数指针和指针函数的区分方法,可以通过从右到左结合来区分

//对于数组指针 int (*p)[n],因为括号优先级较高,因此*号与数组名p先结合,也就是说p首先是一个指针,然后与[n]结合,表示指针p指向了一个大小为n的数组,数组的类型为int

//对于指针数组 int *p[n]p[]先结合,因此p首先是一个大小为n的数组,剩下的部分是数组的类型,即int*类型,也就是数组的每个元素都是一个int*指针。


int p[n]; // 定义了一个指针数组,数组大小为 n ,数组中的每个元素都是一个 int 指针每个元素都是一个指针

访问数组的方式                                                                  

p[i][j]

*(p[i]+j)

*(*(p+i)+j)

*(p+i)[j] #include<bits/stdc++.h> using namespace std; int main()

{

int a[2][3];

cout<<a[2][3];

cout<<*(a[2]+3); cout<<*(*(a+2)+3); cout<<*(a+2)[3];

}

 

例题分析                                                                  

0. 若有定义语句: int a[2][3],*p[3]; 则以下语句中正确的是( C )。

(A) p=a; (B) p[0]=a; (C) p[0]=&a[1][2]; (D) p[1]= &a;

//本质上是指针数组,每个元素都是一个指针

 

11. 有函数原型 void fun(int *); 已知 int a =10; int *x = &a;

下面选项中,正确的调用是( A )。

(A) fun(x); (B) fun(*x); (C) fun(&x); (D) fun(*a);

//本题最正确的是fun(x)fun(&a)

2(3 ) 已知 char *a[] ={"you", "are", "a", "student", "right"};则 cout <<*(a+3);

的显示结果是?

student

//本质上这是一个二维数组,这个数组有5行,每一行都存了一个字符串,那么(a+3)就指向第3,后 解引用,就可以输出student

 

扩展                                                                  

#include<bits/stdc++.h> using namespace std; int main()

{

char *a[] ={"you", "are", "a", "student", "right"}; cout<<a<<'\n';

cout<<a+1<<'\n';

cout<<*(a)<<'\n'; cout<<*(a+1);

}

0x78fdf0 0x78fdf8 you

are

#include<bits/stdc++.h> using namespace std; int main()

{

char a[] ={"you"}; cout<<a<<'\n'; cout<<a+1<<'\n'; cout<<*(a)<<'\n'; cout<<*(a+1);

}

you ou y

o

 

其他                                                                  

3. (3 ) 语句 cout<<setfill(%)<<setw(6)<<3456; 的输出结果是?

%%3456

//补全方式

#include<bits/stdc++.h> using namespace std; int main()

{

char str[10]; cin>>str; cout<<str;

}

//读到空格自动停止

int main()

{ int * p = NULL ; p = new int (50) ; if ( p == NULL )

{ cout << "allocation faiure\n"; return 1; } cout << *p ;

}

new 动态生成的对象没有释放会造成内存泄露问题,需要在最后加上 delete p

下列选项中,( B )是合法的常量。A -1e3.5 B “are” C a

//下列表达式选项中,( A )是不正确的。

A ++(a++) B a+++b C ++(++x) D ++a+b

由于++需要常量,因此不能先a++,此时也是一个变量

下面各选项企图说明一种新的类型名 Int,其中正确的为( A )。

A typedef int Int ; B typedef Int int;

C typedef Int =int; D typedef long long ll;

 

函数指针和指针函数                                                                  

指针函数本质是一个函数,其返回值为指针。函数指针本质是一个指针,其指向一个函数。

指针函数:int* fun(int x,int y);

函数指针:int (*fun)(int x,int y)

//函数指针用法

int add(int x,int y){ return x+y;

}

int sub(int x,int y){

 

return x-y;

}

//函数指针

int (*fun)(int x,int y);

int main()

{

//第一种写法fun = add;

qDebug() << "(*fun)(1,2) = " << (*fun)(1,2) ;

//第二种写法fun = &sub;

qDebug() << "(*fun)(5,3) = " << (*fun)(5,3) << fun(5,3)

//有两种调用方式func(5,3)等价于add(5,3) ,另外一种是(*func)(5,3)

}

//赋值方式

//fun = &Function

//fun = Function;

//取地址运算符&不是必需的,因为一个函数标识符就表示了它的地址,如果是函数调用,还必须包含一个圆括 号括起来的参数表。

//调用方式

//x = (*fun)();

//x = fun();

设有函数说明和变量定义:int max(int x,int y); int(*p)(int,int)=max; int a, b;

以下不能正确调用 max 函数的是( C )

A (*p)(a,b) B p(a,b) C (&p)(a,b) D max(a, b) p(a,b)实际上是直接调用

(*p)(a,b)是指针调用

max(a,b)是直接调用

//C就是瞎说了

设有函数说明和变量定义:int sum(int*,int); int(*p)(int*,int)=sum; int a[10], b;

以下不能正确调用 sum 函数的是( )

A (&p)(a,b) B p(a,b) C (*p)(a,b) D sum(a, b)

//同上

#include<bits/stdc++.h> using namespace std; int main()

{

char *str="\nThank\10you,\0sir!";

//答案是11,\n算一个,\10算一个,\n不算for(int i=0;i<strlen(str);i++)

{

cout<<str[i];

}

}

 

. int a = 4,b;对下面四个表达式的值说法正确的是( B)。

(1) b += (a++); (2) b += (++a); (3) (b++) += a; (4) (++b) += (a++);

A.9、10、10、11 B.(3)式错误 C.(4)式错误 D.(3)(4)都错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/245441.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【一秒梵高】基于OpenCV4实现图像九种风格迁移

风格迁移 图像风格迁移、色彩填充与色彩变换等&#xff0c;严格意义上来说都属于计算机视觉任务中图像处理的分支。它们输入的是图像&#xff0c;输出的也是图像&#xff0c;过程实现图像到图像的内容与风格的转换&#xff0c;深度学习在这类图像处理任务上也取得了良好的效果…

吴恩达深度学习L2W3作业

欢迎来到本周的编程作业。 到目前为止&#xff0c;你一直使用numpy来构建神经网络。现在&#xff0c;我们将引导你使用深度学习框架&#xff0c;该框架将使你可以更轻松地构建神经网络。TensorFlow&#xff0c;PaddlePaddle&#xff0c;Torch&#xff0c;Caffe&#xff0c;Kera…

小项目:迷宫

目录 引言1.题目描述及思想2.代码实现3.最终结果 引言 这个迷宫的话就是去年这时候&#xff0c;我记得当时讲这个的时候我还是一脸懵逼&#xff0c;就是事后花时间能够看懂&#xff0c;能够理解&#xff0c;但是自己肯定是不能够实现的&#xff0c;而且觉得这个东西非常的庞大…

一文讲清 QWidget 大小位置

一文讲清 QWidget 大小位置 前言 ​ QWidget 的位置基于桌面坐标系&#xff0c;以左上角为原点&#xff0c;向右x轴增加&#xff0c;向下y轴增加。 一、图解 ​ ​ 如上图所示&#xff0c;当窗口为顶层窗口时&#xff08;即没有任何父窗口&#xff09;&#xff0c;系统会自…

docker小白第三天

docker小白第三天 docker为什么会比虚拟机快 1、docker有着比虚拟机更少的抽象层。不需要Hypervisor实现硬件资源虚拟化&#xff0c;运行在docker容器上的程序直接使用的都是实际物理机的硬件资源&#xff0c;因此在CPU、内存利用率上docker将会在效率上有明显优势。 2、dock…

利用闭包与高阶函数实现缓存函数的创建

缓存函数是一种用于存储和重复利用计算结果的机制。其基本思想是&#xff0c;当一个函数被调用并计算出结果时&#xff0c;将该结果存储在某种数据结构中 (通常是一个缓存对象)以备将来使用。当相同的输入参数再次传递给函数时&#xff0c;不再执行实际的计算&#xff0c;而是直…

Unity 控制刚体的移动与旋转的方法

在场景创建一个Cube,并添加刚体&#xff0c;如图&#xff1a; 编写脚本&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;[RequireComponent(typeof(Rigidbody))] public class RibRotate : MonoBehaviour {//private Vector3 mo…

使用过滤器Filter实现请求拦截

早期使用servlet进行网络开发时&#xff0c;没有拦截器这些内容&#xff0c;那时做请求拦截都是使用Filter过滤器实现的&#xff0c;配置Filter要对哪些请求路径处理&#xff0c;有权限或不需要拦截的路径放行&#xff0c;没有权限的路径直接拦截请求。 一、Filter直接进行拦截…

JAVA架构师或者teamleader要了解的东西

一、java架构师必备基本知识 什么是Java中的内存泄漏?如何避免内存泄漏? Java中的内存泄漏是指程序在申请内存后,无法释放未再使用的内存空间。避免内存泄漏的方法包括:避免使用finalize方法,使用缓存时需要手动清理不再使用的对象,及时关闭资源等。 什么是Java中的多态…

dockerfile---创建镜像

dockerfile创建镜像&#xff1a;创建自定义镜像。 包扩配置文件的创建&#xff0c;挂载点&#xff0c;对外暴露的端口。设置环境变量。 docker镜像的方式: 1、基于官方源进行创建 根据官方提供的镜像源&#xff0c;创建镜像&#xff0c;然后拉起容器。是一个白板&#xff0c…

<JavaEE> 网络编程 -- 网络通信基础(协议和协议分层、数据封装和分用)

目录 一、IP地址 1&#xff09;IP地址的概念 2&#xff09;IP地址的格式 二、端口号 1&#xff09;端口号的概念 2&#xff09;端口号的格式 3&#xff09;什么是知名端口号&#xff1f; 三、协议 1&#xff09;协议的概念 2&#xff09;协议的作用 3&#xff09;TC…

IBIS AMI Model 算法模式的选择

常规的信号完整性仿真&#xff0c;只会包含传统的基于IBIS的芯片行为级模型&#xff0c;但高速串行总线在使用过程中&#xff0c;经常会由于传输信道或链路过长以及信号频率较高而造成信号衰减过大&#xff0c;接收端无法正确判别信号&#xff0c;因此&#xff0c;这类SerDes芯…

Amazon SageMaker:让机器学习变得更简单、更强大

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 前言&#xff1a; 在大数据时代的浪潮中&#xff0c;数据不再只…

指令数据:训练大模型的“隐形助力”

作者&#xff1a;谭婧 &#xff08;一&#xff09;指令数据&#xff0c;了解一下 先聊一件圈内趣事&#xff1a; 2023年初&#xff0c;大约在1月到2月份前后&#xff0c; 百度公司如流工作卡上有一个任务&#xff0c; 让百度员工打开脑洞&#xff0c;写“问答对”。 一问一答都…

HashMap常见面试问题

简述HashMap原理&#xff1f; HashMap基于数组加链表的方式来实现&#xff0c;数组下标通过hash值来计算&#xff0c;当下表冲突时&#xff0c;就会进行遍历链表&#xff0c;当链表长度大于8的时候会转化为红黑树。 HashMap的put过程&#xff1f; put的第一步是计算hash值&a…

什么时候使用匿名类,匿名类解决了什么问题?为什么需要匿名类 ?

匿名类通常在以下场景下使用&#xff1a; 一次性使用&#xff1a; 当你需要创建一个类的实例&#xff0c;但该类只在一个地方使用&#xff0c;而不打算在其他地方重复使用时&#xff0c;可以考虑使用匿名类。 简化代码&#xff1a; 当创建一个小型的、一次性的类会让代码更简洁…

VUE中如果让全局组件在某一页面不显示

目录 前言 方法一 1.在全局组件中添加一个变量用于控制显示与隐藏。 2.在全局组件的模板中使用 v-if 条件来决定是否显示该组件 3.在不需要显示全局组件的页面中&#xff0c;修改 showGlobalComponent 变量的值为 false&#xff0c;以隐藏全局组件。 4.在需要隐藏全局组…

TrustZone之总线请求

接下来&#xff0c;我们将查看系统中的总线请求者&#xff0c;如下图所示&#xff1a; 系统中的A型处理器具有TrustZone感知&#xff0c;并在每个总线访问中发送正确的安全状态。然而&#xff0c;大多数现代SoC还包含非处理器总线请求者&#xff0c;例如GPU和DMA控制器。 与完成…

​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展

在数字化时代&#xff0c;云计算成为推动创新和业务发展的关键驱动力。Amazon Lightsail 作为亚马逊云科技家族中的一员轻量应用服务器&#xff0c;为小型企业和创业公司提供了简便、强大的云计算服务。无论您是刚刚起步的初创公司&#xff0c;还是需要灵活而高效的云解决方案&…

第5次实验:ICMP

目的&#xff1a; 要看ICMP&#xff08;互联网控制信息协议&#xff09;是如何使用的。ICMP是IP的一个配套协议&#xff0c;通过处理各种错误和测试情况&#xff0c;帮助IP执行其功能。通过处理各种错误和测试情况来帮助IP执行其功能。它在第5.6.4节中有介绍。文中有涉及。在做…