静态函数

C语言存储类别和链接

拈花ヽ惹草 提交于 2019-12-04 05:30:40
目录 C语言存储类别和链接 存储类别 存储期 五种存储类别 存储类别和函数 分配内存malloc()和free() C语言存储类别和链接 ​ 最近详细的复习C语言,看到存储类别的时候总感觉一些概念模糊不清,现在认真的梳理一下。C语言的优势之一能够让程序员恰到好处的控制程序,可以通过C语言的内存管理系统指定变量的作用域和生存周期,实现对程序的控制。 存储类别 基本概念 对象 :在C语言中所有的数据都会被存储到内存中,被存储的值会占用一定的物理内存,这样的一块内存被称为 对象 ,它可以储存一个或者多个值,在储存适当的值时一定具有相应的大小。(C语言对象不同于面向对象语言的对象) 标识符 :程序需要一种方法来访问对象,这就需要声明变量来实现,例如: int identifier = 1 ,在这里 identifier 就是一个标识符,标识符是一个名称并遵循变量的命名规则。所以在本例中 identifier 即是C程序指定硬件内存中的对象的方式并提供了存储的值的大小“1”。在其它的情况中 int * pt 、 int arr[10] ,pt就是一个标志符,它指定了储存地址的变量,但是表达式*p不是一个标志符,因为它不是一个名称。 arr 的声明创建了一个可容纳10个 int 类型元素的对象,该数组的每一个元素也是一个对象。 作用域 :描述程序中可访问标识符的区域

C++面向对象 静态成员和友元

删除回忆录丶 提交于 2019-12-04 03:50:56
第十一章 静态成员和友元 11.1 静态成员 1.C++类当中的静态数据成员仍借用保留字static,但是与之前的静态全局变量,静态局部变量以及静态函数没有关系。 2.静态数据成员不占用具体对象的数据空间。 3.静态数据成员的创建和销毁处分权不属于任何对象。对象有权利读和写静态成员。静态成员应该在创建任何具体对象之前就可以访问,所以要求静态成员在创建类的任何对象 之前就要存在(犹如全局变量、全局对象在main函数前面执行一样)因此静态数据成员应该在主函数之前先定义初始化。 4.静态数据成员不能没有定义也不能不定义。应该将类的静态数据成员定义和初始化语句放在类的内部实现源文件当中。 格式为: 数据类型 类名::静态数据成员名=初始化值; 或者:  数据类型 类名::静态数据成员名(初始化值); (在这里不能再写保留字static) 5.静态数据成员的生命期是全局的,与是否创建了对象没有关系。 6.要访问静态数据成员的时候,可以用对象访问也更一般是用类名访问。 对象名.静态数据成员名 类名::静态数据成员名 7.静态成员函数的声明语法格式: static 返回类型 静态成员函数名(形式参数表)在类体外定义的时候不能添加保留字static! 8.静态成员函数可以被该类所有对象所使用,但是注意静态成员函数没有隐含传递所谓的“本对象地址”的指针形式参数this,只能显式地传递对象作为参数。

statice关键字

人盡茶涼 提交于 2019-12-04 00:36:11
在学习Java的开始我们就接触到了static关键字了,main函数就是用static关键字来形容的,那么static到底有什么用? 在我们构建一个项目的过程中,总有那么几个属性在整个代码中不会进行改变,那么我们就可以使用stati关键字来修饰它,那么我们应该怎么来使用static呢? static修饰变量 语法: static 修饰属性 变量; static,静态的,可以用来修饰属性,方法,*代码块,*内部块。 static的内存地址有一个单独的地方,叫做静态域,那我们就可以解释为什么一个变量在不同的对象下赋值的时候,其他对象也会跟着改变,静态变量不用于实例变量,我们可以理解为在一个变量调用了static进行修改后,静态域中的静态变量就会被修改,当其他对象再去调用的时候就已经改变了,而且耶可以看出,为什么静态变量可以在全局使用。 静态变量和实例变量不同的是,在我们没有设立对象的时候我们就可以为我们的静态变量初始化内存空间,并且我们可以通过类来调用我们的静态变量,但是如果是实例变量的话,我们需要在建立对象以后我们在会给分配内存空间,所以说我们不能通过类来调用实例变量。 static修饰方法(类方法) 与变量一样,随着类的加载而加载,我们也可以在通过类来进行调用,类.类方法。 静态方法中只能调用此类中静态的属性和静态的方法,这一点是需要特别注意的,

Linux--部署Django项目

我是研究僧i 提交于 2019-12-03 23:42:56
简单部署 1.安装虚拟环境virtualenvwrapper,创建虚拟环境目录,进入虚拟环境,我的虚拟环境目录叫venv2 [root@HH ~]# workon venv2 (venv2) [root@HH ~]# ls 2.cd进入到项目目录里面,安装项目必须的模块,例如django,djangorestframework,pymysql等等。 3.修改settings.py的配置文件 修改数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydjango', #数据库名 'HOST': '127.0.0.1', #这里服务器的ip地址 'PORT': 3306, #端口 'USER': 'root', #用户名 'PASSWORD': 'zou123456', #用户密码 } } 更改允许主机 ALLOWED_HOSTS = ['*'] 关闭debug debug=True 4.进入数据库创建mydjango数据库 5.启动项目 python manage.py runserver 0.0.0.0:8008 注意点:检查mysql数据库是否启动,启动时加0.0.0.0,关闭防火墙,如果时云服务器,检查安全组 什么是wsgi WSGI是web服务器网关接口,它是一个规范

gcc详解以及静态,动态库的生成 2

拟墨画扇 提交于 2019-12-03 22:28:40
我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两 种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态 库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运 行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以 及使用它们。 在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。 第1步 :编辑得到举例的程序--hello.h、hello.c和main.c; hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出" Hello XXX!"。hello.h(见程序1)为该函数库的头文件。main.c(见程序3)为测试库文件的 主程序,在主程序中调用了公用函数hello。 程序1: hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name); #endif //HELLO_H 程序2: hello.c #include <stdio.h> void hello(const char *name) { printf("Hello %s!\n", name); } 程序3: main.c #include "hello.h" int

C Primer Plus 第12章 12.3 存储类和函数

北城余情 提交于 2019-12-03 21:41:11
函数也具有存储类。函数可以是外部的(默认情况下)或者静态的(C99增加了第三种可能性,即在第16章“C预处理器和C库"中将讨论的内联函数)。外部函数可以被其他文件中的函数调用,而静态函数只可以在定义它的文件中使用。例如,考虑一个包含如下函数声明的文件: double gammma(); /*默认为外部的*/ static double beta(); extern double delta(); 函数gamma()和delta()可被程序的其他文件中的函数使用,而beta()则不可以。因为beta()被限定在一个文件内,故可以其他文件中使用具有相同名称的不同函数。使用static存储类的原因之一就是创建为一个特定模块所私有的函数,从而避免可能的名字冲突。 通常使用关键字extern来声明在其他文件中定义的函数。这一习惯做法主要 是为了使程序更清晰,因为除非函数声明使用了关键字static,否则认为这是extern的。 使用哪种存储类 对于”使用哪种存储类?“这个问题的回答多半是"自动的”。否则为什么要选择自动类型作为默认类型?是的,我们知道乍看起来外部存储很有诱惑力。把变量都设成外部变量,就不用为使用参数和指针在函数之间传递数据而费心了。然而,这存在着一种不十分明显的缺陷。您将不得不为函数A()违背您的意图,偷偷修改了函数B()所用的变量而焦急。多年来

Django对静态文件的处理——开发阶段

独自空忆成欢 提交于 2019-12-03 21:07:47
上一篇说完了 Django 为部署阶段所提供的静态文件处理工具,这篇接着说开发阶段。 开发阶段 在 Django 看来,静态文件的处理应该交由另外的程序来处理。但为了方便快速开发,Django 也提供了一些工具,在开发阶段临时顶替来处理静态文件。 一方面,Django 的官方文档中用“quick and dirty”“grossly inefficient”“insecure”等字眼来多次强调不要在实际生产环境中使用这套工具;另一方面,Django 限制只有在 DEBUG 模式下这些工具才能工作。所以,当做辅助工具用就好,不要在生产环境下使用。 另外,与 上一篇中的那些工具一样,这里介绍的工具也在 staticfiles 应用下,都需要首先在 INSTALLED_APPS 中开启 django.contrib.staticfiles 这一项。 分两种情况来说: 如果你是用 runserver 命令在本地启动的 Django 程序,那么这些辅助工具就已经自动开始为你服务了。即,所有 STATIC_URL 下的请求都会自动被处理,显示所需的静态文件。 如果你在本地用的别的服务器(比如 Apache)来启动 Django 程序,那么有以下几种方式来开启静态文件处理程序。 在 URL 配置文件中添加两行内容,如下, 1 2 3 4 5 from django.contrib

Django(二)静态文件引入框架

核能气质少年 提交于 2019-12-03 17:59:12
前言 各环境等的使用版本如下: Linux Mint 18.2 (Ubuntu 16.04); python版本2.7.12和3.5.2; Django版本为1.9。 在前一篇文章中我们已经把一个登录的页面显示在网页上了,而且跳转只跳到了原来的页面,这些只是前期简单的建立项目,相当于学一门语言的开篇课,建立helloworld项目。 我们可以看到上一篇的登录页面非常简单(丑),我们想要使用一些开源的框架来美化界面怎么办呢,比如我想使用amazeUI、bootsrap、echarts等等。这就是本文的目的了,创建静态文件,我们可以把一些静态的图片、字体、js、css等文件放进去使用。其次还要实现页面的跳转。 项目目录结构如下(生成的.pyc文件就没有列出): demo demo __init__ .py settings .py urls .py wsgi .py login migrations __init__ .py admin .py apps .py __init__ .py models .py tests .py views .py static css amazeui .css other .min .css fonts img log02_03 .png js plug templates home .html login .html db .sqlite 3

C++多态技术

孤街浪徒 提交于 2019-12-03 15:57:23
C++多态技术 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形。在程序设计领域,一个广泛认可的定义是 “一种将不同的特殊行为和单个泛化记号相关联的能力”。和纯粹的面向对象程序设计语言不同,C++中的多态有着更广泛的含义。除了常见的通过类继承和虚函 数机制生效于运行期的动态多态(dynamic polymorphism)外,模板也允许将不同的特殊行为和单个泛化记号相关联,由于这种关联处理于编译期而非运行期,因此被称为静态多态 (static polymorphism)。 事实上,带变量的宏和函数重载机制也允许将不同的特殊行为和单个泛化记号相关联。然而,习惯上我们并不将它们展现出来的行为称为多态(或静态多态)。今 天,当我们谈及多态时,如果没有明确所指,默认就是动态多态,而静态多态则是指基于模板的多态。不过,在这篇以C++各种多态技术为主题的文章中,我们首 先还是回顾一下C++社群争论已久的另一种“多态”:函数多态(function polymorphism),以及更不常提的“宏多态(macro polymorphism)”。 函数多态 也就是我们常说的函数重载(function overloading)。基于不同的参数列表,同一个函数名字可以指向不同的函数定义: // overload_poly.cpp #include

MakeLab实验报告

一曲冷凌霜 提交于 2019-12-03 15:46:06
目录 Lab_4实验报告 屏幕截图 考察内容 解题思路 Task0 Task1 Task2 Task3 Task4 Reference Lab_4实验报告 屏幕截图 考察内容 本次lab的考察内容为链接的有关知识(其实感觉更像是在传授技巧?),包括通过Makefile,利用g++或ld命令实现静态/动态链接。 解题思路 Task0 目标任务 编写Makefile文件的同时修改main.cpp,将main.cpp编译为可执行文件main。 思路 首先观察各份代码,理清程序思路。main函数的思路是调用三个函数:testPrint(),testPrint(num),notATest()。其中前两个函数在some.h中声明,在some.cpp中定义;最后一个函数在some.cpp中定义。因为main函数只能使用some.h中声明的函数,因此notATest不能被调用。应注释掉该行代码。随后在Makefile中键入以下代码: main:main.cpp g++ -o main main.cpp some.cpp 运行make main,成功。 思考题 Q1:代码中的错误是什么?由此看来.h与.cpp的关系是怎样的? A1:错误是main函数调用了.cpp文件中定义的函数。.h和.cpp的关系类似包含关系,链接器在遇到未声明函数时总是先在.h里找声明,随后在.cpp里找对应函数的实现。