c++学习day3(字符串_指针)
1.字符串
1)三种形式
用双引号括起来的字符串常量:结尾会有一个'\0'字符,但该字符只占据字节数,不会使字符串长度增加。
存放于字符数组中,以'\0'字符结尾:数组元素个数应至少为字符串长度+1
string对象:
2)读取方法
scanf:读到空格结束
cin.getline(char buf[], int bufsize):读入一行,至多读入bufsize-1个字符,结尾自动添加'\0',注意回车换行符不会被读入
gets(char buf[]):库函数,读入一行,没有限制字符串长度,但有可能导致数组越界。结尾自动添加'\0',注意回车换行符不会被读入
3)头文件 cstring
2.指针
1)定义:比如 int * p 定义了指针p,p存放的是内存地址
2)指针的互相赋值:只能同类型的指针赋值,否则需要强制类型转换,但这样容易出问题。
比如 int * pn, char *pc; pn = (int *)pc;这样没有问题,但需要注意的是,由于pn是4个字节,而pc是1个字节。因此当往pn里存放内容超过1个字节时,可能会出错。
指向地址0的指针就是空指针,比如 int *p = NULL;
3)运算
同类型指针变量,可以对地址进行大小比较、相减/加(比如p1-p2 = (地址p1-地址p2)/sizeof(T),表示之间存储了多少了T类型的变量)
指针变量p+/-一个整数n的结果仍是指针,比如p+n = p + n*sizeof(T),还可以表示为p[n]
4)作用:指针用于访问内存空间。其实通过变量也可以访问内存空间,而使用指针则可以不通过变量,便能对内存进行操作。一般应用于底层功能,是区别于java/python的一个地方。
举例:访问int型变量a前面的那一个字节
int a;
char *p = (char *)&a;
--p;
注意这里是访问一个字节,根据指针运算规则,不能去定义一个int *型的指针。
5)数组名是一个指针常量,不能被赋值,就是说指针指向的地址不能改变。
6)指向指针的指针:T**p,定义指向 T*类型指针 的指针p,比如
7)strncpy 注意如果src的长度>=n,则只替换掉dest的前n个字符,若<n,则直接替换dest
8)void指针 void * p:可以用任何类型的指针对void指针进行赋值或初始化
注:1. 由于sizeof(void)没有定义,因此*p没有定义,p++等也没有定义
2. 应用举例:库函数memset:用于初始设置、数组拷贝
9)函数指针:函数名是该函数所占内存空间的起始地址,令一个指针变量指向该函数,就可以使用指针变量调用该函数。
c++学习day3(字符串_指针)的更多相关文章
- Redis源码学习:字符串
Redis源码学习:字符串 1.初识SDS 1.1 SDS定义 Redis定义了一个叫做sdshdr(SDS or simple dynamic string)的数据结构.SDS不仅用于 保存字符串, ...
- 从IL角度彻底理解回调_委托_指针
从IL角度彻底理解回调_委托_指针 目录 从IL角度彻底理解回调_委托_指针 1.创作此文的背景 1.1.委托能帮助代码更好地封装 1.2.委托能随时随地更方便地运行其他类中的方法 1.3.委托非常适 ...
- C/C++:提升_指针的指针和指针的引用
C/C++:提升_指针的指针和指针的引用 写在前面 今天在使用指针的时候我发现了一个自己的错误.
- C++_系列自学课程_第_9_课_C语言风格字符串_《C++ Primer 第四版》
前面说了写关于数组和指针的内容,这次在这里讨论一下字符串,讨论一下C语言风格的字符串. 在C语言里面我们利用字符数组来对字符串进行处理, 在C++里面我们前面说过一种类类型string可以对字符串进行 ...
- c#编程指南(十) 平台调用P-INVOKE完全掌握, 字符串和指针
可以说新手使用P-INVOKE最开始的头疼就是C#和C++的字符串传递,因为这里涉及到两个问题. 第一:C#的string和C++的字符串首指针如何对应. 第二:字符串还有ANSI和UNICODE(宽 ...
- iOS学习09C语言函数指针
本次主要学习和理解函数指针 1.函数指针 void printValue(int number) { printf("number = %d\n", number); } int ...
- iOS学习之C语言指针
访问数据的两种方式: 1.直接访问: 2.间接访问:先找到内存地址,根据地址访问存储单元.(内存地址 被称为指针) 定义指针变量: 类型修饰符 *指针变量名 = NULL; NULL表示空指针,相当 ...
- jquery中如何以逗号分割字符串_百度知道
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- C++第四篇--重载_指针_引用
C++第四篇--重载_指针_引用 1. 基础知识 重载:函数名相同,根据参数不同(类型.数量.顺序不同)调用同名函数 指针和引用:引用就是别名,引用时必须初始化,引用你定义的变量. int a; in ...
随机推荐
- Struts2_API
1.访问servletAPI方法1 public String execute() throws Exception { //request域对象==>map (struts2并不推荐使用原生r ...
- spring集成Hessian的基本使用方法
一.什么是RPC RPC全称Remote Procedure Call,中文名叫远程过程调用.RPC是一种远程调用技术,用于不同系统之间的远程相互调用.其在分布式系统中应用十分广泛. 二.什么是Hes ...
- Ubuntu Server 16.04 安装MySQL并设置远程访问
Ubuntu Server 16.04 安装MySQL 1. 使用root账号 sudo apt-get install mysql-serversudo apt-get install mysql- ...
- 【leetcode-101】 对称二叉树
101. 对称二叉树 (1过) 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [ ...
- bzoj千题计划315:bzoj3172: [Tjoi2013]单词(AC自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3172 构建AC自动机 在fail树上,点i的子树大小 表示trie树上根节点到i构成的单词 是 多 ...
- HDU 6345(子串查询 暴力)
题意是每组给定一个字符串,在有限查询次数内输出所要查询区间的字典序最小的子串个数. 字典序最小的子串,就是所查询区间中字典序最小的单个字符,问题就转化成了求一段区间内字典序最小的字符个数. 开始时盲目 ...
- python模块之hashlib
摘要算法 1. 摘要算法又称为哈希算法.散列算法,是通过函数将任意长度的数据转化成固定长度的数据串(通常用16进制的字符串表示). 2. 摘要算法将通过摘要函数f()将数据转化成固定长度的摘要(dig ...
- termios.h(FreeBSD 12.0)
一.文件位置 /usr/include/termios.h 二.文件内容 /*- * SPDX-License-Identifier: BSD-3-Clause * * Copyright (c) 1 ...
- JSViews--JQuery系的MVVM框架
JSViews https://github.com/BorisMoore/jsviews JsViews: next-generation MVVM and MVP framework - brin ...
- JVM学习(一)简介
一.java程序编译到运行大概流程 1.Source Code Files为.java文件 2.通过编译产生可执行的字节码. 3.通过jvm得到机器可以执行的机器码 4.操作系统运行机器码,并与硬件进 ...