memcpy与strcpy的区别:
memcpy
void * memcpy ( void * destination, const void * source, size_t num );
The function does not check for any terminating null character in source - it always copies exactly num bytes.
该方法只会从source拷贝num个字符到destination,不会检查结束符,所以有时候打印destination会带一个@
strcpy
char * strcpy ( char * destination, const char * source );
Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point).
该方法会检查结束符
const修饰指针的几种情形
1.常量指针
const 类型 * 指针名 等价于 类型 const * 指针名
const int *p1=&a //不可以用*p改变a的值
int a=10; int b=3;
*p1=11 //错误,因为p1指向的内容是a的值10,此处*p1=11相当于修改a的值错误,但是a=11确实可以的
p=&b; //正确 指针指向的内容不可变,但是指针p1可以指向其他位置
2.指针常量
类型 * const 指针名
int * const p1 = &a
p1=&a //正确 指针指向a地址
*p1=5 //正确 指针指向的内容可以被改变,即可以通过*p1去修改a的值
p1=&b //错误 ,指针的位置再也不能变。
3.指向类型常量的常量指针
const 类型 * const 指针名
const int * const p1 = &a //p指向的内存单元,和p指向内存单元中存放的内容都是不可变的
const修饰函数
1.放在后面:
A.不可以修改任何数据成员,即函数体内的任何数据成员不可修改;
B.不可以调用本对象的非const修饰的方法,即只能调用同样const放在最后申明的函数;
C.成员函数是const类型的,如果要求返回值是类的成员变量,那么该成员变量不能是非cosnt或者非mutable成员变量,如果返回的是临时变量则没有此限制;
int AClass::getNum() const { //函数体内不能修改任何成员变量的值,不然报错 num += 1; // #Error...error C2166: l-value specifies const object # return num; }
2.放在前面修饰函数的返回值
如果给以“指针传递”方式的函数返回值加const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。
函数:const char * GetString(void);
错误使用:char *str = GetString();
正确使用:const char *str = GetString();
注意:如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。int GetInt(void) 不需要加const
__builtin_return_address(LEVEL)函数解释
1、__builtin_return_address(0)的含义是,得到当前函数执行完成后需要返回到地址,此函数被别的函数调用,然后此函数执行完毕后,需要回到的地方,即当前函数退出后,回到调用它的函数的下一行代码的位置;
2、__builtin_return_address(1)的含义是,得到当前函数的调用者要返回到的地址。注意是调用者要返回到的地址,不是当前函数需要返回到调用者的下一行代码地址。
#include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> void level3() { printf("%s(0): %p\n", __func__, __builtin_return_address(0)); printf("%s(1): %p\n", __func__, __builtin_return_address(1)); } int level2() { printf("%s(0): %p\n", __func__, __builtin_return_address(0)); printf("%s(1): %p\n", __func__, __builtin_return_address(1)); level3(); return 2;//addr=0x4005d0 } int level1(int temp) { temp += 1; printf("%s(0): %p\n", __func__, __builtin_return_address(0)); level2(); return temp;//addr=0x400606 } int main() { level1(123); return 0;//addr=0x400619 }执行结果如下:
相关推荐
《深度探索C++对象模型》是一本专注于C++编程语言底层机制的著作,它涵盖了C++对象模型的诸多核心概念和重要知识点。在C++的世界里,对象模型是理解类与对象、内存管理、继承、多态等特性背后的基石。以下是对这个...
慕课C++实战课笔记全面记录C++知识点 本资源总结了C++的基础知识点,从Windows和Linux开发环境的准备到第一个C++程序的编写, Output数据的分类和输出,最后到程序的注释。下面是详细的知识点解释: 1. Windows...
标题中的"C++学习笔记.pdf"表明文档是一份关于C++语言的学习记录。C++是一种广泛使用的编程语言,由Bjarne Stroustrup在1980年代初开发,它是一种静态类型、编译式、通用编程语言。C++支持多范式编程,包括过程化、...
开发这样的程序涉及以下关键知识点: 1. **系统调用与API**:对于Windows,需要使用`SetWindowsHookEx`函数来设置键盘钩子;对于Linux,可能需要使用`read`, `write`等系统调用来读写键盘设备。 2. **键盘事件处理...
详细知识点: 1. **键盘事件处理**:C++程序可以利用操作系统提供的API(如Windows API的GetAsyncKeyState或Unix/Linux的read函数)来捕获键盘事件。这些API能检测到按键按下和释放,从而记录完整的键入序列。 2. ...
和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好 - **解读**:参与有意义的技术讨论可以促进相互学习和成长,而无意义的争论则会浪费时间。专注于实质性的技术话题,而不是无谓的比较。 ###...
【描述】:“知识点记录wwwddd”可能是一个关于IT学习或工作的个人笔记集合,其中“wwwddd”可能是个人的标识或者是特定主题的缩写。由于描述较为简洁,我们无法直接获取具体的知识点,但我们可以根据常见的IT学习...
在C++编程中,实现这样一个系统可能涉及到以下关键知识点: 1. **面向对象编程(OOP)**:C++是一种支持面向对象编程的语言,因此,系统设计可能会包含类(如`Consumer`,`Expense`等),封装了家庭成员和消费记录...
标题 "c++ 学习记录" 暗示了这是一个关于C++编程语言的学习笔记或者教程,可能包含作者在学习过程中的心得、实践案例以及对...文档"c++学习理解.doc"应该包含了这些知识点的详细讲解,建议结合实际编程练习来提升技能。
8. **基本网络编程**:虽然这不是C++ Builder本身的知识点,但模拟聊天室通常涉及到TCP/IP网络编程。初学者可以学习套接字编程,了解如何建立连接、发送和接收数据。 9. **异常处理**:在编写程序时,良好的错误...
该项目可能涉及以下核心知识点: 1. **套接字编程**:C++中的点对点通信通常基于套接字(Sockets)进行,它是网络通信的基础。开发者可能使用了`<sys/socket.h>`或`<winsock2.h>`库来创建、绑定、监听和连接套接字...
在编程实践过程中,通过直接面对并解决这些实际遇到的Bug,程序员可以更深刻地理解和记忆相关知识点。例如,编译器提供的错误信息,有时晦涩难懂,但却是学习编译过程和语言规范的宝贵资料。库函数的错误使用通常会...
"C++学习代码实例"这个压缩包文件显然是为了帮助那些已经对C++有一定基础的程序员更深入地理解和掌握C++语言。 在学习C++的过程中,代码实例是至关重要的。通过实际编写和运行代码,开发者可以更好地理解语言的语法...
下面我们将逐一探讨这些功能的具体实现和相关知识点。 1. **添加记录**:在通讯录系统中,添加记录通常涉及到创建一个新的联系人对象,包含姓名、电话号码等信息,并将其插入到数据结构(如链表、数组或哈希表)中...
在学习C和C++的过程中,深入理解这些知识点,并通过实际编写代码来巩固,将对成为一名熟练的C/C++程序员至关重要。同时,不断跟踪C++的新标准和发展,比如C++11、C++14、C++17、C++20等,能确保你的技能保持最新,...
总结,这个图书馆管理系统(C++)的源代码涵盖了C++语言基础、面向对象编程、文件操作、数据结构与算法、异常处理、用户界面设计等多个核心知识点,对于学习和理解C++的实际应用具有很高的参考价值。通过深入研究和...
标题《从缺陷中学习C_C++》和描述《从缺陷中学习C_C++,淘宝测试部编写的,完全是...这些知识点对于任何层级的C/C++程序员来说都是宝贵的资源,能够帮助他们在编程和调试过程中不断进步,并最终成为更加优秀的开发者。
### C++程序员高级阶段学习规划知识点详解 #### 一、C++服务器程序员 **核心技能:** 1. **精通C++及STL:** 深入理解C++语言特性和标准模板库(STL),能够高效地使用这些工具来解决复杂问题。 2. **Linux系统编程:*...