首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C 语言】字符串拷贝 ( 函数使用推荐方法 | 凡是涉及 修改指针指向 操作一律创建新 指针变量 执行 | 引入 辅助 局部 指针变量 )

文章目录 一、函数使用推荐方法 二、完整代码示例 一、函数使用推荐方法 ---- 在函数中 , 形 指针变量 , 不建议直接使用 ; 推荐 在 函数中 , 定义 局部 指针变量 , 接收...形 指针变量 , 具体操作函数中 定义 局部指针变量 ; 直接使用 *to_tmp++ 样式代码 , 会改变指针指向 , 有可能会导致错误 , 一旦出错 , 根本无法排查 ; 如果 将...数组首地址 常量指针 指针指向 进行修改 , 直接就报错了 ; 函数 值 , 不要轻易进行改变 , 因此一般函数 , 都定义为 const char * 指针常量 类型 ; 引入...辅助 局部变量 , 接收 函数 形参变量 ; 凡是涉及 修改指针指向 操作一律创建新 指针变量 执行 ; 代码示例 : /* * 实现字符串拷贝 ( 实现了模块化 ) * 将 from...指针指向字符串 拷贝到 to 指针指向字符串换 */ void str_copy(char *from, char *to) { // 使用局部变量 接收 形 char *from_tmp

89010

CC++基础入门(持续更新中)

---- 实参与形函数定义里小括号称为形函数调用时传入参数称为实参。...即实参是从函数体外传入函数变量。 而形函数体内参数列表中用于接收实参信息变量。 函数值传递: 所谓值传递,就是函数调用时实参将数值传入给形。...通过值传递,如果函数体内形参数值发生改变,并不会影响函数体外实参。 即值传递时,形无法修饰实参。...int * const p2 = &a; //p2 = &b; //错误 *p2 = 100; //正确 printf("const修饰常量时,指针指向不可以改,指针指向值可以更改...printf("const既修饰指针又修饰常量时,指针指向指针指向值都不可以更改\n"); return 0; }   ---- 7.6 指针和数组 ---- 作用: 利用指针访问数组中元素

4.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

c++从入门到进阶--引用与常量

//指向常量指针,而非常指针。...; // 对stringstream而言,operator<< 是一直往字符串流中写字符,而不是覆盖之前输入字符 cout << ss.str() <<endl; /*str()函数创建是一个临时...ⅱ形存储空间是函数被调用时才分配,调用开始,系统为形开辟一个临时存储区,然后将各实参传递给形,这是形就得到了实参值。...②地址传递 地址传递与值传递不同在于,它把实参存储地址传送给形,使得形指针和实参指针指向同一块地址。因此,被调用函数中对形指针指向地址中内容任何改变都会影响到实参。...不能返回自动局部对象指针或引用:函数执行结束后,函数占用栈存储空间被释放,原本位于这段存储空间中局部对象和临时变量都被释放,返回局部对象引用或指针指向不再有效内存区域 重载函数 如果同一个作用域几个函数名字相同但形列表不同

74820

嵌入式软件开发常用关键字和运算符

3、修饰指针 C语言中const修饰指针要特别注意,共有两种形式,一种是用来限定指向空间值不能修改;另一种是限定指针不可更改。...但是可以通过嵌套方式调用,变相封装表现。 3、static修饰局部变量,更改该局部变量生命周期。 生命周期:将临时变量生命周期变成全局变量生命周期。...通常使用共用体做一些标志位操作,例如以下示例,可以非常灵活访问Val中bit位。...,将跟在后面的参数转成一个字符常量。...void* 指针可以指向任意类型数据,在C语言指针操作中,任意类型数据地址都可转为void* 指针。因为指针本质上都是unsigned int。

17010

C++引用分析实例与案例刨析及使用场景分析详解

引用语法更清楚简单 PS:值传递与地址传递回顾: 值传递 所谓值传递,就是函数调用时实参将数值传入给形 值传递时,==如果形发生,并不会影响实参== 示例: void swap(int num1...system("pause"); return 0; } 引用本质 分析 本质:引用本质在c++内部实现是一个指针常量指针指向不可改)....main(){ int a = 10; //自动转换为 int* const ref = &a; 指针常量指针指向不可改,也说明为什么引用不可更改 int& ref = a;...即引用不可更改 旧知回顾 引用注意事项 引用必须初始化 引用在初始化后,不可以改变 常量引用 作用:常量引用主要用来修饰形,防止误操作 在函数列表中,可以加==const修饰形==,防止形改变实参...那我们可以利用指针性质来进行一些实验性操作,见上图demo1-demo3 多情况使用场景 demo1址和值都不可以修改 ​ 只读不可修改,防止误操作 demo2指针常量,地址可变,值不可变 ​ 用于在函数体内给函数体外变量更换别名

26720

C++基础语法

作用:字符型变量用于显示单个字符 语法char ch = 'a'; 注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号 注意2:单引号只能有一个字符,不可以是字符CC+...在函数定义中 函数名:给函数起个名称 参数列表:使用函数时,传入数据 函数体语句:花括号代码,函数内需要执行语句 return表达式: 和返回值类型挂钩,函数执行完后,返回相应数据 int...值传递时,==如果形发生,并不会影响实参 值传递时,形是修饰不了实参 函数声明 作用: 告诉编译器函数名称及如何调用函数。...; //*p1 = 100; 报错 //2. const修饰常量指针指向不可以改,指针指向值可以更改 int* const p2 = &a; //p2 = &b; //错误 *p2 =...常量指针指针指向可以改,指针指向值不可以更改 指针常量指针指向不可以改,指针指向值可以更改 const 修饰指针,又修饰常量:都不可更改

89710

第6章 函数

在含有常量引用形函数中,无法将常量引用传递给非常量引用函数,从而限制了后者适用范围。此时需要使用 const_cast来转换底层 const属性。...在上面两个表达式中,argv是一个数组,它元素是指向 C风格字符指针,而 argv又可以看成是指向首元素指针,因此 argv就是一个二级指针,所以也就有了第二个表达式写法。...形式如下 int (*func(int i))[10] // func函数返回指向 10个 int组成数组指针 可以按照由到外顺序来理解该声明含义: func(int i)表示一个函数...下式就可以很清楚看到 func函数返回是一个指针,且该指针指向了含有 10个整数数组。...bool b1 = pf(1, 2); 等价于 bool b2 = (*pf)(1, 2); 不能定义函数类型,但形可以是指向函数指针

1.2K70

C语言过渡到C++敲门砖

Func2(1,2,3); 函数重载 C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数不同,可以是参数个数不同或者 类型不同。...常量延伸 (表达式1 + 表达式2)在赋值时也会产生临时对象 注意:临时对象具有常性!...• 引⽤在初始化时引⽤⼀个对象后,就不能再引⽤其他对象;⽽指针可以在不断改变指向对象。 • 引⽤可以直接访问指向对象,指针需要解引⽤才是访问指向对象。...⽤起来相对更安全⼀些 inline inline对于编译器⽽⾔只是⼀个建议 ,用inline修饰函数也叫内联函数,编译时候C++编译器会在调用地方将函数代码全部展开,这样调用内联函数就不用寄哪里栈帧了...+中NULL可能被定义为字⾯常量0,或者C中被定义为⽆类型指针(void*)常量

7510

全栈必备 :C语言基础

C语言提供数据结构是以数据类型形式给出C数据类型划分如下: 基本类型 数值类型 字符类型 枚举类型 构造类型 数组类型 结构类型 联合类型 指针类型 数据有常量与变量之分,习惯上用大写字母代表常量...数值类型要注意数范围不同。字符常量是用单引号括起来一个字符,还允许以一个“\”开头特殊字符常量。枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。...结构体是C语言提供一种数据结构,一般形式如下: struct 结构体名字 { 成员列表 } 变量名列表; 一般,可以利用宏取得结构偏移量: #undef...在指针定义语句类型前加const,表示指向对象是常量指针变量可以指向另一个指针指针指针。...带参数宏与函数非常类似,在引用函数时也是在函数名后括号 写实参,且要求实参数目等于形数目,但它们还是有区别的: 对参数使用方式不一样。

1.1K30

const关键字应用总结

C++中const关键字用法非常灵活,而使用const将大大改善程序健壮性,const 是C++中常用类型修饰符,常类型是指使用类型修饰符const说明类型,常类型变量或对象值是不能被更新...char* const pContent;` 还有其中区别方法,沿着号划一条线 如果const位于左侧,则const就是用来修饰指针指向变量,即指针指向常量;如果const位于*右侧,const...函数使用const const修饰函数参数 传递过来参数在函数不可以改变(无意义,因为Var本身就是形) void function(const int Var); 参数指针所指内容为常量不可变...另外只有引用const传递可以传递一个临时对象,因为临时对象都是const属性,且是不可见,短时间存在一个局部域中,所以不能使用指针,只有引用const传递能够捕捉到这个家伙。...常量指针被转化成非常量指针,并且仍然指向原来对象; 常量引用被转换成非常量引用,并且仍然指向原来对象; 常量对象被转换成非常量对象。

50210

C++基础快速入门

+在创建变量时,必须给变量一个初始值,否则会报错 1.4 常量 作用:用于记录程序中不可更改数据 C++定义常量两种方式 #define 宏常量: #define 常量常量值 通常在文件上方定义...在函数定义中 函数名:给函数起个名称 参数列表:使用函数时,传入数据 函数体语句:花括号代码,函数内需要执行语句 return表达式: 和返回值类型挂钩,函数执行完后,返回相应数据 示例:...值传递 所谓值传递,就是函数调用时实参将数值传入给形 值传递时,如果形发生,并不会影响实参 示例: void swap(int num1, int num2) { cout << "交换前:" <...a = 10; int b = 10; //const修饰指针指针指向可以改,指针指向值不可以更改 const int * p1 = &a; p1 = &b; //正确 //*p1...= 100; 报错 //const修饰常量指针指向不可以改,指针指向值可以更改 int * const p2 = &a; //p2 = &b; //错误 *p2 = 100;

15010

C++核心编程(上)

1 内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数二进制代码,由操作系统进行管理 全局区:存放全局变量和静态变量以及常量 栈区:由编译器自动分配释放, 存放函数数值...全局区中存放全局变量、静态变量、常量 常量区中存放 const修饰全局常量字符常量 1.2 程序运行后 栈区: 由编译器自动分配释放, 存放函数数值,局部变量等 注意事项:不要返回局部变量地址...本质:引用本质在c++内部实现是一个指针常量....main(){ int a = 10; //自动转换为 int* const ref = &a; 指针常量指针指向不可改,也说明为什么引用不可更改 int& ref = a...+推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了 2.6 常量引用 **作用:**常量引用主要用来修饰形,防止误操作 在函数列表中,可以加const修饰形

1.8K30

嵌入式软件工程师笔试面试指南-CC++

即p指向内存可以变,p指向数值内容不可变 int const*p; //同上 int*const p;//指针常量,本质是一个常量,而用指针修饰它。...即p指向内存不可以变,但是p内存位置数值可以变 const int* const p;//指向常量常量指针。即p指向内存和数值都不可变 修饰常引用。...C++函数返回可以按值返回和按常量引用返回,偶尔也可以按引址返回。多数情况下不要使用引址返回。 C++中拷贝赋值函数能否进行值传递? 不能。...常量指针指向常量指针指向常量常量指针有什么区别?...C++可以给函数定义默认参数值。在函数调用时没有指定与形相对应实参时,就自动使用默认参数。 默认参数语法与使用: (1) 在函数声明或定义时,直接对参数赋值,这就是默认参数。

1.5K11

iOS小技能:装箱和拆箱(boxing、unboxing)​

引言 get 和post 布尔值参数处理( 使用NSNumber 传BOOL值) 全局const常量代替宏常量,节省内存空间。 敏感逻辑保护: 把函数名隐藏在结构体里,以函数指针成员形式存储。...2.2 Objective-C 常量 选择器和协议可以作为方法参数。@selector()和@protocol()作为伪常量指令返回一个指向特定选择器(SEL)或协议(Protocol *)指针。...@selector():返回一个指向有特定名称选择器 SEL 指针。...-conformsToProtocol: 2.3 全局const常量代替宏常量,节省内存空间。 使用字符常量来代替宏使用 定义const 全局常量 ,保证只在一处定义,多处进行引用。...把函数名隐藏在结构体里,以函数指针成员形式存储。

55010

C++核心编程笔记合集

全局区还包含了常量区, 字符常量和其他常量也存放在此. ​ ==该区域数据在程序结束后由操作系统释放==. 示例 原理:对比不同类型数据地址区分区域划分。...那我们可以利用指针性质来进行一些实验性操作,见上图demo1-demo3 多情况使用场景 demo1址和值都不可以修改 ​ 只读不可修改,防止误操作 demo2指针常量,地址可变,值不可变 ​ 用于在函数体内给函数体外变量更换别名...,且别名只在函数体内有效 demo3常量指针,地址不变,值可以变 ​ 正常值传递,可以简化指针值传递繁琐操作 函数提高 函数默认参数 分析 在C++中,函数列表中是可以有默认值。...p1指向堆区,是非法。...this指针指向 被调用成员函数 所属对象 this指针是隐含每一个非静态成员函数一种指针 this指针不需要定义,直接使用即可 this指针用途: 1.解决名称冲突:当形和成员变量同名时

94210

C++基础入门_C语言入门基础

+在创建变量时,必须给变量一个初始值,否则会报错 1.4 常量 作用:用于记录程序中不可更改数据 C++定义常量两种方式 #define 宏常量: #define 常量常量值 通常在文件上方定义...在函数定义中 函数名:给函数起个名称 参数列表:使用函数时,传入数据 函数体语句:花括号代码,函数内需要执行语句 return表达式: 和返回值类型挂钩,函数执行完后,返回相应数据 示例:定义一个加法函数...,函数调用时传入参数称为实参 6.4 值传递 所谓值传递,就是函数调用时实参将数值传入给形 值传递时,如果形发生改变,并不会影响实参 示例: void swap(int num1, int num2...a = 10; int b = 10; //const修饰指针指针指向可以改,指针指向值不可以更改 const int * p1 = &a; p1 = &b; //正确 //*p1 = 100...; 报错 //const修饰常量指针指向不可以改,指针指向值可以更改 int * const p2 = &a; //p2 = &b; //错误 *p2 = 100; //正确 //const既修饰指针又修饰常量

5.6K20

C++快速扫盲(基础篇)

--- 常量 作用:用于记录程序中不可更改数据 C++定义常量两种方式 #define 宏常量: #define 常量常量值 通常在文件上方定义,表示一个常量 const修饰变量 const...a'; 注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号 注意2:单引号只能有一个字符,不可以是字符CC++中字符型变量只占用1个字节。...常见函数样式有4种 无无返 有无返 无有返 有有返 示例: //函数常见样式 //1、 无无返 void test01() { //void a = 10; //无类型不可以创建变量,原因无法分配内存...10; //const修饰指针指针指向可以改,指针指向值不可以更改 const int * p1 = &a; p1 = &b; //正确 //*p1 = 100; 报错 /.../const修饰常量指针指向不可以改,指针指向值可以更改 int * const p2 = &a; //p2 = &b; //错误 *p2 = 100; //正确 //const

73620

const那些事

在我们使用c/c++时候,或者在面试时候,会被问道与const相关问题,比如const修饰放在指针哪个位置,const修饰引用传递与值传递等等,这些究竟是什么个情况,本节就是专门来解决const...具体使用如下: (1)指向常量指针 const int *ptr; *ptr = 10; //error ptr是一个指向int类型const对象指针,const定义是int类型,也就是ptr所指向对象类型...const修饰函数参数 (1)传递过来参数及指针本身在函数不可变,无意义!...,var本身就是形,在函数不会改变。...包括传入指针也是一样。 输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加const 修饰。

61330

C语言入门

注意不能写成’abc’、’123’,单引号只能包含一个字符,表示字符常量;双引号可以包含一串字符,表示字符常量。 (5)符号常量:用#define指令指定用一个符号代表一个常量。...("%d\n",*q); 7.2、常量指针 常量指针就是指向常量指针,也就是指针指向地址值不可被改变,其又被称为只读指针。...如: const int *p; 它能够改变指向,但是不能够改变地址示例: int a = 10,b=20; const int *p; p = &a; printf("%d\n",*p...); //*p=30; //错误:不能通过指针改变变量值 p = &b; //可以改变指针指向 printf("%d\n",*p); 指针常量常量指针一般用于函数参数传递,为了使在函数使用中不改变值以及指针指向...使用三级指针r给变量a赋值 10.4、双重指针作为函数 一般来说函数无法改变实参,除非形指针类型

79430

C语言之预处理命令与用typedef命名已有类型

对程序中用双撇号括起来字符字符,不进行置换。...宏定义与定义变量不同,只作字符替换,不分配空间;   带参数宏定义(不只是进行简单字符串替换,还要进行参数替换) 带参数宏定义与函数时不同,主要有以下几点: 函数调用时,先求出实参表达式值,然后带入形...而宏只是进行简单字符替换。 函数调用是在程序运行时处理,为形分配临时内存单元。而宏展开则是编译前进行,在展开时不分配内存单元,不进行值传递处理,也没有“返回值”概念。...,那这里就不能用A ,不过一般不在函数使用typedef } 4....PINT p;//p可以更改,p指向内容不能更改,相当于 const int *p;或 int const *p; pint s1, s2; //s1和s2都是int型指针 PINT s3,

1.6K90
领券