`
xiandaoyan
  • 浏览: 22321 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

C++学习知识点记录

 
阅读更多

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
}
 执行结果如下:
level1(0): 0x400619
level2(0): 0x400606
level2(1): 0x400619
level3(0): 0x4005d0
level3(1): 0x400606
 

 localtime与localtime_r

localtime()返回一个内部静态变量指针,是线程不安全的。每次只能同时使用localtime()函数一次,要不就会被重写。

localtime_r()是可重入版,是线程安全的版本,但是Windows上没有。

 

重点:两者在多线程情况下,可能造成死锁。localtime虽然线程非安全,但是内部是有锁的,不安全是指同时使用多次localtime()所有的输出都是一样的,最后一次写的为准,用临时变量可以解决这个问题。

 

分享到:
评论

相关推荐

    深度探索C++对象模型·重要知识点总结

    《深度探索C++对象模型》是一本专注于C++编程语言底层机制的著作,它涵盖了C++对象模型的诸多核心概念和重要知识点。在C++的世界里,对象模型是理解类与对象、内存管理、继承、多态等特性背后的基石。以下是对这个...

    慕课C++实战课,笔记,全面记录C++知识点

    慕课C++实战课笔记全面记录C++知识点 本资源总结了C++的基础知识点,从Windows和Linux开发环境的准备到第一个C++程序的编写, Output数据的分类和输出,最后到程序的注释。下面是详细的知识点解释: 1. Windows...

    c++学习笔记.pdf

    标题中的"C++学习笔记.pdf"表明文档是一份关于C++语言的学习记录。C++是一种广泛使用的编程语言,由Bjarne Stroustrup在1980年代初开发,它是一种静态类型、编译式、通用编程语言。C++支持多范式编程,包括过程化、...

    C++开发键盘记录器

    开发这样的程序涉及以下关键知识点: 1. **系统调用与API**:对于Windows,需要使用`SetWindowsHookEx`函数来设置键盘钩子;对于Linux,可能需要使用`read`, `write`等系统调用来读写键盘设备。 2. **键盘事件处理...

    键盘日志记录程序-c++源码

    详细知识点: 1. **键盘事件处理**:C++程序可以利用操作系统提供的API(如Windows API的GetAsyncKeyState或Unix/Linux的read函数)来捕获键盘事件。这些API能检测到按键按下和释放,从而记录完整的键入序列。 2. ...

    学习c++的50个忠告

    和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好 - **解读**:参与有意义的技术讨论可以促进相互学习和成长,而无意义的争论则会浪费时间。专注于实质性的技术话题,而不是无谓的比较。 ###...

    知识点记录wwwddd

    【描述】:“知识点记录wwwddd”可能是一个关于IT学习或工作的个人笔记集合,其中“wwwddd”可能是个人的标识或者是特定主题的缩写。由于描述较为简洁,我们无法直接获取具体的知识点,但我们可以根据常见的IT学习...

    C++家庭消费记录管理系统源码.zip

    在C++编程中,实现这样一个系统可能涉及到以下关键知识点: 1. **面向对象编程(OOP)**:C++是一种支持面向对象编程的语言,因此,系统设计可能会包含类(如`Consumer`,`Expense`等),封装了家庭成员和消费记录...

    c++ 学习记录

    标题 "c++ 学习记录" 暗示了这是一个关于C++编程语言的学习笔记或者教程,可能包含作者在学习过程中的心得、实践案例以及对...文档"c++学习理解.doc"应该包含了这些知识点的详细讲解,建议结合实际编程练习来提升技能。

    初学者学习C++ Builder第一个程序

    8. **基本网络编程**:虽然这不是C++ Builder本身的知识点,但模拟聊天室通常涉及到TCP/IP网络编程。初学者可以学习套接字编程,了解如何建立连接、发送和接收数据。 9. **异常处理**:在编写程序时,良好的错误...

    C++写的点对点通讯,类似QQ

    该项目可能涉及以下核心知识点: 1. **套接字编程**:C++中的点对点通信通常基于套接字(Sockets)进行,它是网络通信的基础。开发者可能使用了`&lt;sys/socket.h&gt;`或`&lt;winsock2.h&gt;`库来创建、绑定、监听和连接套接字...

    从缺陷中学习C/C++初稿

    在编程实践过程中,通过直接面对并解决这些实际遇到的Bug,程序员可以更深刻地理解和记忆相关知识点。例如,编译器提供的错误信息,有时晦涩难懂,但却是学习编译过程和语言规范的宝贵资料。库函数的错误使用通常会...

    C++学习代码实例

    "C++学习代码实例"这个压缩包文件显然是为了帮助那些已经对C++有一定基础的程序员更深入地理解和掌握C++语言。 在学习C++的过程中,代码实例是至关重要的。通过实际编写和运行代码,开发者可以更好地理解语言的语法...

    C++通讯录 添加记录 按名字查询记录 按电话号码查询记录 删除记录 修改记录 保存记录 读入记录 上一页与下一页 第一页与最后一页 退出文件等等

    下面我们将逐一探讨这些功能的具体实现和相关知识点。 1. **添加记录**:在通讯录系统中,添加记录通常涉及到创建一个新的联系人对象,包含姓名、电话号码等信息,并将其插入到数据结构(如链表、数组或哈希表)中...

    记录C、C++学习的过程.zip

    在学习C和C++的过程中,深入理解这些知识点,并通过实际编写代码来巩固,将对成为一名熟练的C/C++程序员至关重要。同时,不断跟踪C++的新标准和发展,比如C++11、C++14、C++17、C++20等,能确保你的技能保持最新,...

    图书馆管理系统(c++)

    总结,这个图书馆管理系统(C++)的源代码涵盖了C++语言基础、面向对象编程、文件操作、数据结构与算法、异常处理、用户界面设计等多个核心知识点,对于学习和理解C++的实际应用具有很高的参考价值。通过深入研究和...

    从缺陷中学习C_C++

    标题《从缺陷中学习C_C++》和描述《从缺陷中学习C_C++,淘宝测试部编写的,完全是...这些知识点对于任何层级的C/C++程序员来说都是宝贵的资源,能够帮助他们在编程和调试过程中不断进步,并最终成为更加优秀的开发者。

    C++程序员高级阶段学习规划

    ### C++程序员高级阶段学习规划知识点详解 #### 一、C++服务器程序员 **核心技能:** 1. **精通C++及STL:** 深入理解C++语言特性和标准模板库(STL),能够高效地使用这些工具来解决复杂问题。 2. **Linux系统编程:*...

Global site tag (gtag.js) - Google Analytics