c++学习day3(字符串_指针)

时间:2024-07-09 10:33:14

1.字符串

1)三种形式

用双引号括起来的字符串常量:结尾会有一个'\0'字符,但该字符只占据字节数,不会使字符串长度增加。

存放于字符数组中,以'\0'字符结尾:数组元素个数应至少为字符串长度+1

string对象:

2)读取方法

scanf:读到空格结束

cin.getline(char buf[], int bufsize):读入一行,至多读入bufsize-1个字符,结尾自动添加'\0',注意回车换行符不会被读入

gets(char buf[]):库函数,读入一行,没有限制字符串长度,但有可能导致数组越界。结尾自动添加'\0',注意回车换行符不会被读入

3)头文件 cstring

c++学习day3(字符串_指针)

2.指针

1)定义:比如 int * p 定义了指针p,p存放的是内存地址

c++学习day3(字符串_指针)

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,比如

c++学习day3(字符串_指针)

7)strncpy 注意如果src的长度>=n,则只替换掉dest的前n个字符,若<n,则直接替换dest

c++学习day3(字符串_指针)

c++学习day3(字符串_指针)

c++学习day3(字符串_指针)

8)void指针 void * p:可以用任何类型的指针对void指针进行赋值或初始化

注:1. 由于sizeof(void)没有定义,因此*p没有定义,p++等也没有定义

2. 应用举例:库函数memset:用于初始设置、数组拷贝

c++学习day3(字符串_指针)

c++学习day3(字符串_指针)

9)函数指针:函数名是该函数所占内存空间的起始地址,令一个指针变量指向该函数,就可以使用指针变量调用该函数。

c++学习day3(字符串_指针)