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. 运维监控-基于yum的方式部署Zabbix Server 4.0 版本

    运维监控-基于yum的方式部署Zabbix Server 4.0 版本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.如何选择zabbix版本 1>.打开zabbix官方 ...

  2. Hadoop生态圈-Ranger数据安全管理框架

    Hadoop生态圈-Ranger数据安全管理框架 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Ranger简介 Apache Ranger是一款被设计成全面掌握Hadoop生 ...

  3. Visual Studio连接到TFS

    我在学校自己使用git,公司使用VSS,然后这个项目又使用TFS.Visual Studio连接到TFS是这样滴 1.点连接到团队项目 2.添加TFS服务器的url,写到你的http:XXX/tfs就 ...

  4. C#图像检测开源项目

    AForge.NET AForge.NET is an open source C# framework designed for developers and researchers in the ...

  5. winddow10下 virtualBox Ubuntu网络设置

    1. virtualbox 全局设置 2. 虚拟机网络设置 3.虚拟机中设置 4. 宿主机 设置 5. 最后 在虚拟机中 ping www.baidu.com

  6. HDU - 3974 Assign the task (线段树区间修改+构建模型)

    https://cn.vjudge.net/problem/HDU-3974 题意 有一棵树,给一个结点分配任务时,其子树的所有结点都能接受到此任务.有两个操作,C x表示查询x结点此时任务编号,T ...

  7. bash 刷题leetcode

    题目一: 给定一个文本文件 file.txt,请只打印这个文件中的第十行. 示例: 假设 file.txt 有如下内容: Line 1 Line 2 Line 3 Line 4 Line 5 Line ...

  8. Kettle系列: kettle标准化trans模板

    =============================主控trans + sub trans 模式=============================针对一个具体的处理任务(比如增量加载一个 ...

  9. VS Code使用 Vue工程配置 eslint

    首先确保VS Code 安装了 Vetur 和 Eslint 插件. VS CODE :文件 =>首选项 => 设置   (有3个点 或 {} 这样的大括号,打开setting.json) ...

  10. 【七】zuul路由网关

    一.zuul是什么?zuul 包含以下两个最主要的功能:1.路由功能: 负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础.2.过滤器功能: 则负责对请求的处理过程进行干预,是实现请 ...