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(字符串_指针)的更多相关文章

  1. Redis源码学习:字符串

    Redis源码学习:字符串 1.初识SDS 1.1 SDS定义 Redis定义了一个叫做sdshdr(SDS or simple dynamic string)的数据结构.SDS不仅用于 保存字符串, ...

  2. 从IL角度彻底理解回调_委托_指针

    从IL角度彻底理解回调_委托_指针 目录 从IL角度彻底理解回调_委托_指针 1.创作此文的背景 1.1.委托能帮助代码更好地封装 1.2.委托能随时随地更方便地运行其他类中的方法 1.3.委托非常适 ...

  3. C/C++:提升_指针的指针和指针的引用

    C/C++:提升_指针的指针和指针的引用 写在前面 今天在使用指针的时候我发现了一个自己的错误.

  4. C++_系列自学课程_第_9_课_C语言风格字符串_《C++ Primer 第四版》

    前面说了写关于数组和指针的内容,这次在这里讨论一下字符串,讨论一下C语言风格的字符串. 在C语言里面我们利用字符数组来对字符串进行处理, 在C++里面我们前面说过一种类类型string可以对字符串进行 ...

  5. c#编程指南(十) 平台调用P-INVOKE完全掌握, 字符串和指针

    可以说新手使用P-INVOKE最开始的头疼就是C#和C++的字符串传递,因为这里涉及到两个问题. 第一:C#的string和C++的字符串首指针如何对应. 第二:字符串还有ANSI和UNICODE(宽 ...

  6. iOS学习09C语言函数指针

    本次主要学习和理解函数指针 1.函数指针 void printValue(int number) { printf("number = %d\n", number); } int ...

  7. iOS学习之C语言指针

     访问数据的两种方式: 1.直接访问: 2.间接访问:先找到内存地址,根据地址访问存储单元.(内存地址 被称为指针) 定义指针变量: 类型修饰符 *指针变量名 = NULL; NULL表示空指针,相当 ...

  8. jquery中如何以逗号分割字符串_百度知道

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  9. C++第四篇--重载_指针_引用

    C++第四篇--重载_指针_引用 1. 基础知识 重载:函数名相同,根据参数不同(类型.数量.顺序不同)调用同名函数 指针和引用:引用就是别名,引用时必须初始化,引用你定义的变量. int a; in ...

随机推荐

  1. Sqlserver 数据库定时自动备份

    sqlserver 可以通过微软工具 SQL Server Management Studio  进行数据库定时自动备份,具体步骤如下: 1,打开SQL Server Management Studi ...

  2. Compiling R-3.4.3 on CentOS 6.10 with GNU

    If you are compiling CentOS 6, you will notice that the R source will not compile without a updated ...

  3. 虚拟机复制问题:如何解决“无法手动启动VMware Tools安装”问题

    摘录网址:https://jingyan.baidu.com/article/3c48dd348c4504e10ae35810.html 环境描述: VMware Workstation Ubuntu ...

  4. git的那些事

    前言:记得在想学习git的时候,一直停留在思想的层面,总没有弄清楚它的运行机制,经常与github混淆,还好找到了一个好的教程,带我领略了git的风采 (一)git的优点 git的优点:版本控制在本地 ...

  5. ACM-ICPC 2018 焦作赛区网络预赛 B Mathematical Curse(DP)

    https://nanti.jisuanke.com/t/31711 题意 m个符号必须按顺序全用,n个房间需顺序选择,有个初始值,问最后得到的值最大是多少. 分析 如果要求出最大解,维护最大值是不能 ...

  6. Hive基础概念、安装部署与基本使用

    1. Hive简介 1.1 什么是Hive Hives是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 1.2 为什么使用Hive ① 直接使用 ...

  7. python matplotlib 库学习

    基本使用 import matplotlib.pyplot as plt import numpy as np x = np.linspace(-1,1,50) y = 2*x+1 plt.figur ...

  8. Set接口HashSet实现类

    java.util.Set接口 extends Collection接口 Set特点: 1.不允许有重复的元素 2.没有索引,没有带索引的方法,也不能使用普通的for遍历 java.util.Hash ...

  9. python练习实例2--------构造数据类型

    有如下数据类型 cars = ['鲁A32444', '鲁B12333', '京B8989M', '黑C49678', '黑C46555', '沪B25041', '黑C34567'] locatio ...

  10. 开源框架.netCore DncZeus学习(二)配置连接

    配置连接字符串,update-database,初始数据后,访问报错,提示offset错误.因为本机上使用的sql2008. .net Core 2.X中的EF访问sqlserver2008默认使用的 ...