`
xiandaoyan
  • 浏览: 21474 次
  • 性别: 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++ 学习笔记(在这里指记录了一些学习中的点滴。)

    网上搜集的,个人认为比较经典(作者:用了几年java 了,突然想学习c++ ,昨天用了一天的时间疯狂的学习了一天c++ 基础知识,发现感觉还不错,不过精验告诉我,学编程语言一定要实践,在这里指记录了一些学习中的点滴...

    C++学习笔记

    这个笔记呢,本人学习C++过程当中记录的笔记,知识点很散很难整合,所以一个行之有效的笔记是很好的参考物。【这是笔记(一),笔记(二)会随后传上】当然如果有了很多的经验的牛人大神们就不要参考了,但是C++ 是...

    c++学习笔记

    个人在学习C++ primer plus这本书时所做的笔记,主要记录了c++中比较重要和难的知识点,并不适合完全不懂C++的,适合了解C++并用此回顾知识点的同学

    二级C++语言程序设计-无忧考吧(2019.9).zip

    无忧全国计算机等级考试2019年9月版是最新版本的考试模拟软件, ...•学习讲义:不定时更新考试技巧和知识点汇总,以供参考 下载中心-无忧考吧(官网) http://ncre.wyk8.com/Category_25/Index.aspx

    vc.chm.zip_C 知识点_vc.chm

    此为个人学习c+编程学习时笔记,记录了个人学习c++过程中的问题和好的方法,知识点

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    1.4.1 学习c++ 1.4.2 C++标准 1.4.3 控制台应用程序 1.4.4 Windows编程概念 1.5 集成开发环境简介 1.6 使用IDE 1.6.1 工具栏选项 1.6.2 可停靠的工具栏 1.6.3 文档 1.6.4 项目和解决方案 1.6.5 设置Visual C++2005的...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    1.4.1 学习c++ 1.4.2 C++标准 1.4.3 控制台应用程序 1.4.4 Windows编程概念 1.5 集成开发环境简介 1.6 使用IDE 1.6.1 工具栏选项 1.6.2 可停靠的工具栏 1.6.3 文档 1.6.4 项目和解决方案 1.6.5 设置Visual C++2005的...

    C++《超市商品管理系统》课程设计报告.doc

    " "数 " " " "周一:明确设计任务,学习相关基础知识 " "进 "周二:熟悉各知识点,进行基础练习 " "度 "周三:根据题目要求,进行设计和实现 " "要 "周四:根据题目要求,进行设计和实现 " "求 "周五:程序测试 " ...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

     ·使用visual c++ 2010支持的两种c++语言技术讲述c++编程的基础知识  ·分享c++程序的错误查找技术,并介绍通用的调试原则讨论每一个windows应用程序的结构和基本元素  ·举例说明如何使用mfc开发本地windows...

    Visual C++ 2005入门经典.part05.rar (整理并添加所有书签)

    1.4.1 学习c++ 1.4.2 C++标准 1.4.3 控制台应用程序 1.4.4 Windows编程概念 1.5 集成开发环境简介 1.6 使用IDE 1.6.1 工具栏选项 1.6.2 可停靠的工具栏 1.6.3 文档 1.6.4 项目和解决方案 1.6.5 设置Visual C++2005的...

    C++游戏编程快速入门视频教程 高清不加密

    如 果你会一点C、C++语言,你就可以学习游戏编程了,开发真正的游戏!如果你学过一点C++更好,没学过也没关系。本课程教你从零基础开始开发7个完整的 游戏:Brainiac、Light Cycles、Henway、Battle Office、Meteor ...

    Visual C++ 2005入门经典--源代码及课后练习答案

     本书系编程语言先驱者Ivor Horton的经典之作,是学习C++编程最畅销的图书品种之一,不仅涵盖了Visual C++ .NET编程知识,还全面介绍了标准C++语言和.NET C++/CLI。本书延续了Ivor Horton讲解编程语言的独特方法,...

    Visual C++ 2005入门经典.part07.rar (整理并添加所有书签)

    1.4.1 学习c++ 1.4.2 C++标准 1.4.3 控制台应用程序 1.4.4 Windows编程概念 1.5 集成开发环境简介 1.6 使用IDE 1.6.1 工具栏选项 1.6.2 可停靠的工具栏 1.6.3 文档 1.6.4 项目和解决方案 1.6.5 设置Visual C++2005的...

    Visual C++ 2005入门经典.part09.rar (整理并添加所有书签)

    1.4.1 学习c++ 1.4.2 C++标准 1.4.3 控制台应用程序 1.4.4 Windows编程概念 1.5 集成开发环境简介 1.6 使用IDE 1.6.1 工具栏选项 1.6.2 可停靠的工具栏 1.6.3 文档 1.6.4 项目和解决方案 1.6.5 设置Visual C++2005的...

    Visual C++ 2005入门经典.part06.rar (整理并添加所有书签)

    1.4.1 学习c++ 1.4.2 C++标准 1.4.3 控制台应用程序 1.4.4 Windows编程概念 1.5 集成开发环境简介 1.6 使用IDE 1.6.1 工具栏选项 1.6.2 可停靠的工具栏 1.6.3 文档 1.6.4 项目和解决方案 1.6.5 设置Visual C++2005的...

    ROS学习记录(六)感悟&反思

    在过程中遇到了各种领域的问题,硬件支持,系统兼容,软件迭代等等,但是个人觉得这些都是一些外在的,比较容易解决的问题,但是在学习ROS的过程中,发现了许多之前遗漏的知识点掌握不全面导致的各种问题,甚至出现...

    常规说明:记录cpp知识点,面试题,网络编程,多线程编程

    Cpp程序设计知识点集合 重读cpp Primer,并且将代码实现的过程 Cpp面试题精讲 :Japanese_secret_button_selector: 主要收集各大面试题,并且写出了自己的理解。 Cpp入门与TCPL部分 对Cpp Primer的学习笔记以及部分...

Global site tag (gtag.js) - Google Analytics