首页 > 其他分享 >指针、字符串函数

指针、字符串函数

时间:2024-08-10 10:55:00浏览次数:12  
标签:src const 函数 dest char int 数组 字符串 指针

(一)指针 操作 一维字符型数组

  • const 关键字(只读)

eg:

(1)int  *p;    //基类型(目标类型)

(2)int  a =  10;

     ①const  int  *p = &a;   //const限定是基类型,表示不能通过 *p 的方式修改基类型的数据

     ②int  const *p = &a;    //与①等价   

     ③int *  const  p = &a;  //const限定的是指针变量p,此时表示将 p 限定为只读,不能修改p

     ④const int * const p = &a;  //基类型和指针变量 p 都被限定为只读

原则:(就近原则)const 离谁近,就限定谁

  • 应用

  1. 如果不想通过 *p 的方式改变基类型对应的数据:                                                                      const  int  *p = &a;       或         int  const *p = &a;                                                                   
  2. 如果指针 p 定义好后,不想再指向别的变量:                                                                           int *  const  p = &a;

注意:

形参 设计为 const char * :

(1)目的:防止函数中的误操作。

(2)好处:①提前发现问题,将运行时问题提前到编译时;②提高代码的适应性 :可以接收  char *  、const char *类型的参数;③实参可以传数组名、指针变量,或是一个字符串常量。

  • 处理字符串的方式

1.字符串:在c语言中是按照字符数组的形式存储的。

字符串常量:存储在字符串常量区

2.处理字符串

(1)char s[] = "hello";   //表示 在栈上开辟一块空间,用字符串常量中的 "hello"进行初始化。

(2) const char *p = "hello"; //表示 p指向了 字符串常量区中的 "hello",因为是指向了字符串常量区,所以只能做读取操作,不能修改。

(二)指针 操作 二维数组

  • 二维数组

  1. c语言中并不存在,真正的二维数组。
  2. 二维数组本质 是一维数组的一维数组。
  3. 二维数组 也 符合数组的特点:连续性,有序性,单一性。
  • 从二维数组的本质出发

int[3]  a[2];

确定需要定义什么类型的指针?

   ----->   &a[0]

    因为 a[0] 的类型是 int[3],即一个包含 3 个整数的一维数组类型,所以 &a[0] 就等价于 int[3] * ,但是C语言中不支持这种写法,故写成 int(*)[3]

    int(*p)[3] = a;   //p指向二维数组 a,p的基类型 int[3]

    *p <=> a[0]     // 相当于是内部这个一维数组的数组名

--->  (*p)[0]  --->   *(*p+0) --->  **p 

     因为  *(*(p+1)+1) <=> a[1][1],所以:   *(*(p+i)+j) <=> a[i][j]

注意:二维数组的操作是从二维数组的本质上进行的,二维数组本质是一维数组的一维数组,所以直接的访问操作就是一维 一维的展开。

(三)部分字符串函数

  • strncpy

char *strncpy(char *dest, const char *src, size_t n)

  1. 将 src 所指向的字符串的前 n 个字符复制到 dest 所指向的字符数组中。
  2. 如果 src 字符串的长度小于 n,则在 dest 中填充剩余的位置为 '\0'。如果 src 字符串的长度大于或等于 n,则 dest 不会以 '\0' 结尾。
  3. 代码实现:
char *Strncpy(char *dest, char *src, size_t n)
{
	char *ret = dest;

	while (*src != '\0' && n!=0)
	{
		*dest++ = *src++;
		--n;
	}
	while(n)
	{
		*dest++ ='\0';
		--n;
	}

	return ret;
}
  • strncat

char *strncat(char *dest, const char *src, size_t n)

  1. 将 src 所指向的字符串的前 n 个字符连接到 dest 所指向的字符串的末尾。
  2. 如果 src 字符串的长度小于 n,则将整个 src 字符串连接到 dest 后面。如果连接后的总长度超过了 dest 所分配的空间,可能会导致缓冲区溢出错误。
  3. 代码实现:
char *Strncat(char *dest, char *src, size_t n)
{
	char *ret = dest;

	while(*dest != '\0')
		dest++;
	while(*src != '\0' && n)
	{
		*dest++ = *src++;
		--n;
	}
	*dest = '\0';

	return ret;
}
  • strncmp

int strncmp(const char *s1, const char *s2, size_t n);

  1. 比较 s1 和 s2 所指向的字符串的前 n 个字符。
  2. 如果前 n 个字符相同,则返回 0;如果 s1 小于 s2,则返回负数;如果 s1 大于 s2,则返回正数。
  3. 代码实现:
int Strncmp(const char *s1, const char *s2, size_t n)
{
	while(*s1==*s2 && *s1!=0 && *s2!=0 && n>1)
	{
		s1++;
		s2++;
		--n;
	}

	return *s1 - *s2;
}
  • memcpy

void *memcpy(void *dest, const void *src, size_t n)

  1. 用于从 src 所指向的内存位置复制 n 个字节到 dest 所指向的内存位置。
  2. 这个函数不关心数据的类型,只是简单地按字节进行复制。它返回指向 dest 的指针。需要注意的是,dest 和 src 所指向的内存区域不能重叠,否则可能会产生未定义的行为。
  3. void * :空类型指针,可以接收任何类型的指针。
  4. 代码实现:
void *Memcpy(void *dest, const void *src, size_t n)
{
	char *p = dest;
	const char *q = src;

	while(n)
	{
		*p = *q;
		p++;
		q++;
		n--;
	}

}

​​

标签:src,const,函数,dest,char,int,数组,字符串,指针
From: https://blog.csdn.net/weixin_62989562/article/details/140993045

相关文章

  • 在 SQL 中,怎样使用聚合函数(如 SUM、AVG、COUNT 等)来计算数据的总和、平均值和数量?
    在SQL中,可以使用聚合函数来计算数据的总和、平均值和数量。以下是一些常用的聚合函数的示例:SUM函数:计算指定列的总和。SELECTSUM(column_name)FROMtable_name;AVG函数:计算指定列的平均值。SELECTAVG(column_name)FROMtable_name;COUNT函数:计算指定列的数......
  • 每天深解一个字符串类函数之strcat函数
    目录前言:一、引用头文件二、strcat函数的作用三、理解strcat函数的定义1、返回类型2、参数四、使用strcat函数1、编写代码2、调试运行控制台监视器五、注意要点六、模拟实现前言:每天深入了解一个字符串类函数今天我们要学习的是strcat函数,一个追加字符串......
  • 60个“特征工程”计算函数(Python代码)
    近期一些朋友询问我关于如何做特征工程的问题,有没有什么适合初学者的有效操作。特征工程的问题往往需要具体问题具体分析,当然也有一些暴力的策略,可以在竞赛初赛前期可以带来较大提升,而很多竞赛往往依赖这些信息就可以拿到非常好的效果,剩余的则需要结合业务逻辑以及很多其他的......
  • 远程桌面连接时“发生身份验证错误。要求的函数不受支持”
    问题:连接远程桌面时提示“身份验证错误,要求的函数不受支持”解决方法:一、修改注册表1、WIN+R,然后运行regedit命令2、找到路径:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System3、然后在System文件夹内创建文件夹:\CredSSP\Parameters......
  • leetcode-12 字符串
    12.2字符串比较242有效的字母异位词给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。//解法1:排序后逐个比较字符boolisAnagram(strings,stringt){if(s.length()......
  • 指针与一维数组
    目录指针:指针变量的初始化:赋值:指针作为函数参数://一维整型数组指针实现一维数组逆序:指针实现选择排序:指针实现冒泡排序:指针实现插入排序:指针实现一维整型数组二分查找(有序数组前提下):指针实现一维数组快速排序:指针:指针变量的初始化:如果指针没有初始化,此时是随机......
  • 指针进阶--指针与一维字符型数组
    目录const关键字:constinta =10;constint*p=&a;(等价于intconst*p=&a)const的应用:一维字符型数组与字符函数指针实现strcpy的功能:指针实现strncpy的功能:指针实现strcat功能:指针实现strncat功能:指针实现strcmp功能:指针实现strncmp功能:void*指针(万能指针):指......
  • 深入了解指针(5)
    1.数组指针变量2.⼆维数组传参的本质3.函数指针变量2.⼆维数组传参的本质3.函数指针变量)1.数组指针变量1.1了解数组指针变量的概念整形指针变量——变量——存放的是整形的地址字符指针变量——变量——存放的是字符的地址数组指针——变量—......
  • 软件设计:整合独立函数到工具类与通用类的权衡
    在面向对象编程中,经常会面临是否应该将独立函数整合进工具类或通用类的决策。这个问题涉及到代码组织、维护性以及可扩展性等多个方面。通过将相关的独立函数组织在一起,我们可以提高代码的可读性和可维护性,但同时也可能带来一些潜在的设计挑战。本文旨在探讨在软件设计中整......
  • MySQL(3)--SQL函数
    MySQL函数数字函数CEIL(x)/CEILING(x)向上取整selectceil(column_name)fromtable_name;FLOOR(x)向下取整selectfloor(column_name)fromtable_name;POW(x,y)/POWER(x,y)返回x的y次方selectname,age,POW(age,2)fromstudents;RAND()返回0到1的......