C系列:str、mem系列函数 指针

字符串系列函数

1.输入输出
gets : gets(字符数组)  ,从终端输入字符串到字符数组,但存在缓冲区溢出风险,不推荐使用。
puts : puts(字符数组)  ,输出以 '\0' 结束的字符串。


2.操作处理(str系列函数)
字符串连接strcat : strcat(字符数组1, 字符数组2)  ,把字符数组2的字符串连接到字符数组1后,结果存于字符数组1 。


字符串拷贝strcpy: strcpy(字符数组1, 字符串2)  ,将字符串2复制到字符数组1 。                          strncpy : strncpy(字符数组1, 字符串2, n)  ,将字符串2的前n个字符复制到字符数组1 。


字符串比较strcmp : strcmp(字符串1, 字符串2)  ,按ASCII码从左至右逐个比较两字符串,相等返回0,前者大返回正整数,后者大返回负整数。

strncmp(字符串1, 字符串2,n),比较字符串的前n个字符。


计算字符串长度strlen : strlen(字符数组)  ,测量字符串实际长度(不含 '\0'  )

字符串分割strtok:strtok(str,delim);str为待分割字符串  delim为包含所有分隔符的字符串。

字符串转整形:atoi();

整形转字符串:itoa();

字符串处理函数strstr :用于在一个字符串中查找另一个字符串首次出现的位置。

eg:char str[]="hello world";

     char substr[]="world";

      char*result=strstr(str,substr);

内存操作系列函数(mem系列)

1.memcpy使用:内存逐字节拷贝(目标二地址,目标一地址,字节数)

                           目标一的值拷贝给目标二

函数原型: void *memcpy(void *dest, const void *src, size_t n) 。

2.memmove使用:

函数原型: void *memmove(void *dest, const void *src, size_t n) 。
功能:与 memcpy 类似,但能处理源内存和目标内存重叠的情况。
应用场景:在可能出现内存重叠的复制场景中使用,如字符串中部分内容的移动。

eg:char arr[]="hello world"; 把arr中索引为5的位置复制到索引为3开始的位置。

3.memset 使用:
 
函数原型: void *memset(void *s, int c, size_t n) 。
功能:将内存区域 s 的前 n 个字节设置为指定值 c 。
应用场景:常用于初始化数组、结构体等内存区域为特定值,如将数组初始化为全零或其他特定值。

eg:memset(arr,0,n*sizeof(int));  将数组arr的所有元素初始化为0

4.memcmp 使用:
 
函数原型:int memcmp(const void *s1, const void *s2, size_t n) 。
功能:比较两个内存区域 s1 和 s2 的前 n 个字节,相等返回0, s1 大于 s2 返回正整数, s1 小于 s2 返回负整数。
应用场景:用于比较内存中的数据,如比较两个数组或结构体的内容是否相同。

指针

1.指针的定义(指针是一个变量,其值为另一个变量的地址)

      eg:int val=10;

           int *p=&val;//p保存val的地址,p指向val;

这里,p是一个指针,int则表示指针所指向变量的数据类型。

补充:

char*pa,pb;//pa是char*  pb是char

pa,pb都为char*类型--->char*pa,*pb;

eg:

   #define Type char*    //宏常量

   Type pa,pb;          //pa是char*, pb是char

   typedef char* Type;  //重命名

   Type pa,pb;         //pa,pb都是char*

2.指针与const结合的定义

const与指针配合使用有两种作用,一是限制指针变量,二是限制指针变量所指向的数据。

1)限制指针变量本身

指针变量本身的值不能被修改,但指向可以改变。被const修饰的指针只能在定义时初始化。

eg:int *const p;

    int a=10;

    p=&a;//err

正确形式:

int a=10;

int *const p=&a;

2)限制指针变量所指向的数据

写法:const int *p;  int const *p;

指针可以指向不同变量(指针本身的值可以修改),但不能用指针修改指针所指之物的值。

eg:

int a=10;

int const *p=NULL;//right

p=&a;//right

*p=100;//err

3.*的作用

3.1)运算符

int val=0; int*p=&val;

*p**p---->0*0

3.2)类型 *变量名;    *----指针标识

3.3)*指针变量名      *解引用

4.指针的算术运算

4.1)指针变量与整型量的加减表示移动指针。

long long *p;  p+n 偏移量 n*sizeof(*p)B;

char**q;     q+n 偏移量n*sizeof(char*)B;

s tudent*pstu; pstu+n 偏移量 n*sizeof(*pstu)B;

4.2)指针相减

条件:同一块连续内存区域

结果:整数,表示两个指针之间相差元素个数。

4.3)指针+1系列问题

4.3.1)指针变量类型不同,+1能力也不一样

4.3.2)指针变量和整形加减后的结果任然是指针类型。

4.3.3)指针变量不能乘除运算。

5.数组指针

形式:数据类型(*指针变量名)[数组长度]

eg:int(*p)[5];

初始化:

int arr[]={1,2,3,4};

int(*p)=&arr;

arr[2]<=>*(arr+2)//表示访问数组第三个元素。

6.指针数组(本质是数组,内部元素储存地址)

【地址】【地址】【地址】

7.函数指针

形式:返回值类型(*指针变量名)(参数列表)

eg:int(*pfunc)(int,int)

本质是指针 所指之物是个函数      函数名:函数入口地址

8.指针函数

形式:数据类型*函数名(参数列表)

eg:int*func(int a,int b);

本质是函数,返回值类型是指针(不能返回普通局部变量地址)

9.空指针,野指针

空指针:空指针是一个特殊的指针值,它不指向任何有效的内存地址。

eg:int *p=NULL;

野指针:野指针是指指向一个未确定或非法内存地址的指针。

10.大小端

10.1)存储模式:大端存储模式  小端存储模式

10.2)什么是大端:高低:高位数据存放在低地址位置

          什么是小端:“滴滴”--低低  低位数据存储在低地址位置

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值