局部变量

C++返回栈上的数组(局部变量)问题探索

て烟熏妆下的殇ゞ 提交于 2019-11-27 10:08:37
char* teststr() { char s[] = "hello"; return s; } void main() { char* str = teststr(); char c1 = str[0]; //h char c2 = str[1]; //e char c3 = str[2]; //l char c4 = str[3]; //l char c5 = str[4]; //o char c6 = str[5]; //\0 char* s2 = str; printf(str); } 根据理论:s是栈上数组,是个局部变量,出了函数后将变得无效,如上程序,printf(str)是乱码,验证了理论。 同样,在单步调试状态下查看str的值也是乱码。 但,若去掉 printf(str)这一行,则在单步调试下查看str和s2的值都是正确的结果, 这很奇怪 来源: https://www.cnblogs.com/timeObjserver/p/11358126.html

Java 变量类型

主宰稳场 提交于 2019-11-27 09:39:14
在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下: type identifier [ = value ] [ , identifier [ = value ] ... ] ; 格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。 以下列出了一些变量的声明实例。注意有些包含了初始化过程。 int a, b, c; // 声明三个int型整数:a、 b、c int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值 byte z = 22; // 声明并初始化 z String s = "runoob"; // 声明并初始化字符串 s double pi = 3.14159; // 声明了双精度浮点型变量 pi char x = 'x'; // 声明变量 x 的值是字符 'x'。 Java语言支持的变量类型有: 类变量:独立于方法之外的变量,用 static 修饰。 实例变量:独立于方法之外的变量,不过没有 static 修饰。 局部变量:类的方法中的变量。 实例 public class Variable{ static int allClicks=0; // 类变量 String str="hello world"; // 实例变量 public void method(){ int i

python的局部变量和全局变量

萝らか妹 提交于 2019-11-27 09:30:45
局部变量 什么是局部变量 通俗定义:函数内部定义的变量就叫局部变量。 话不多说,代码如下: def test1(): a = 300 # 定义一个局部变量a,并初始化300 print("--test1--修改前:a=%s" % a) a = 200 # 给变量a重新赋值200 print("--test1--修改后:a=%s" % a) def test2(): a = 400 # 定义另一个局部变量a,并初始化400 print("--test2--修改后:a=%s" % a) # 分别调用函数test1,test2 test1() test2() 输出: --test1--修改前:a=300 --test1--修改后:a=200 --test2--修改后:a=400 结论: 局部变量就是在函数内部定义的变量。 不同的函数内部可以定义名字相同的变量,但它们不会产生影响。 局部变量的作用,为了临时保存数据需要在需要在函数中定义变量来进行存储。 全局变量 什么是全局变量 定义:如果一个变量既能在一个函数中使用,也可以在其他函数中使用,这样的变量就是全局变量。 代码如下: a = 100 # 定义一个全局变量a,并初始化为100 # 分别定义函数test1、test2,功能是打印变量a的值 def test1(): print(a) def test2(): print(a)

iOS正确使用const,static,extern

风流意气都作罢 提交于 2019-11-27 09:29:04
static 修饰局部变量 让局部变量只初始化一次 局部变量在程序中只有一份内存 并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁) 修饰全局变量 全局变量的作用域仅限于当前文件 const 没有const修饰的指针 指针p和*p都能被修改 // 定义一个指针变量 int *p = NULL; // 定义2个int类型的变量 int a = 10; int b = 30; // p指向a p = &a; *p = 20; // p指向b p = &b; *p = 40; NSLog(@"%d %d", a, b); const修饰的*p 被const修饰的*p只能被赋值一次,以后不能赋值,否则编译器报错 // const修饰的*p const int *p = NULL; int const *p = null; *p = 20; // 编译器报错,不能修改*p的值 const修饰的p 被const修饰的p只能存一次地址,以后再也不能其它存地址了,否则编译器报错 // const修饰的指针变量p int * const p = NULL; int a = 20; p = &a; // 编译器报错,不能修改指针变量p const在声明字符串的用法 NSString * const ZMJName = @"jack";

内存管理之栈stack

喜你入骨 提交于 2019-11-27 07:53:36
1、什么是栈 栈是一种数据结构,C语言中使用栈来保存局部变量。栈是被发明出来管理内存的。 2、栈管理内存的特点(小内存、自动化) 先进后出 FILO first in last out 栈 先进先出 FIFO first in first out 队列 栈的特点就是入口就是出口,只有一个口,另一个口是堵死的。所以先进来的必须后出去。 队列的特点就是入口和出口都有,必须从入口进去,从出口出来。所以先进来的必须先出去,不然就会堵住后边的。 3、栈的应用举例:局部变量 C语言中的局部变量是用栈来实现的。 我们在C语言中定义一个局部变量时(int a),编译器就会在栈中分配一段空间(4字节)给我们局部变量使用(分配时 栈顶指针会移动给出空间,给局部变量a使用的意思就是,将4个字节的栈内存的内存地址和我们定义的局部变量名a给关联 起来),对应栈的操作就是入栈。 注意:这里栈指针的移动和内存分配是自动的(栈自己完成,不用我们写代码去操作)。 然后等我们函数退出的时候,局部变量要灭亡。对应栈的操作就是弹栈(出栈)。出栈时也是栈顶指针移动将栈空间中 与a关联的那4个字节空间释放。 这个动作也是栈自动完成的,也不用人写代码干预。 栈的优点:栈管理内存,好处是方便,分配和最后回收都不用程序员操心,C语言自动完成。 分析一个细节:C语言中,定义局部变量如果没有初始化,则值是随机的,为什么?

SYBASE存储过程详解

我们两清 提交于 2019-11-27 06:44:56
SYBASE存储过程 一、存储过程简介 二、存储过程的创建、修改、删除 三、存储过程中的参数、返回值和变量 四、存储过程中的流程控制语言 五、存储过程中的事务、游标 六、ASE存储过程和IQ存储过程的常见区别(附例子) 1 存储过程简介 存储过程(Stored Procedure)是为了完成特定的功能而汇集成一组的SQL语句 集,并为该组SQL语句命名、经编译后 存储在SQL Server的数据库中。用户可以 根据需要决定是 否在每次执行时让SQL Server进行重新编译。用户可以指 定存 储过程的名字和给出参数来执行它。 允许多个用户(有权)访问相同的代码。 提供一种集中且一致的实现数据完整性逻辑的方法。 存储过程用于实现: -- 频繁使用的查询 -- 业务规则 -- 被其他过程使用的公共例行程序,例如错误处理例行程序等 1.1 存储过程的优点 使用存储过程可加快运行速度 可减少网络交通 可重用、可共享性 存储过程也是一种安全机制 使用存储过程实现数据库完整性 提高数据与应用的独立性 1.2 存储过程的分类 系统存储过程主要 系统提供存储过程 用于从系统表中获取信息、为系统管理员和有权用户提供更新系统表 的途径。系统存储 过程的名字都以"sp_"为前缀。 如:sp_help 。 用户定义的存储过 用户定义存储过程 程是由用户为完成某一特定功能 而编写的存储过程。 1.2.1

函数的调用过程与出入栈

╄→гoц情女王★ 提交于 2019-11-27 05:38:32
函数调用的过程 线程执行的基本行为是函数调用,每次函数调用的数据都是通过Java栈传递的。Java栈与数据结构上的栈有类似的含义,它是一块先进后出的数据结构,只支持入栈和出栈两种操作。Java栈的主要内容是栈帧。每次函数调用都会有一个对应的栈帧被压入Java栈,每次函数调用结束(无论是正常返回或者抛出异常),都会有一个栈帧被弹出Java栈。 如图所示,函数1中调用函数2,函数2中调用函数3,函数3调用函数4。函数1被调用,栈帧1入栈;函数2被调用,栈帧2入栈;函数3被调用,栈帧3入栈;函数4被调用,栈帧4入栈;函数4调用完毕,栈帧4出栈;函数3调用完毕,栈帧3出栈,一直到函数1出栈。 每次函数调用都会生成对应的栈帧,从而占用一定的内存。由于HotSpot虚拟机并不区分本地方法栈和Java栈,栈内存大小由-Xss参数设定。关于本地方法栈和Java栈,在Java虚拟机规范中定义了两种异常。 线程的请求栈的深度大于虚拟机所允许的深度,将抛出StackOverflowError异常 public class StackDeepTest { private static int count = 0; public static void recursionCall() { count ++; recursionCall(); } public static void main(String[

第一阶段:Python开发基础 day12 函数进阶

情到浓时终转凉″ 提交于 2019-11-27 03:52:15
目录 一、函数的返回值 一、什么是返回值 二、为什么要有返回值? 二、函数的调用 一、什么是函数的调用 二、为何用调用函数? 三、函数调用的三种形式 三、函数的参数 一、形参和实参 二、位置参数 三、关键字实参 四、默认形参 五、总结 四、可变长参数 一、可变长形参之* 二、可变长实参之* 三、可变长形参之* * 四、可变长实参之* * 五、可变长参数应用 六、命名关键字形参 五、函数对象 六、函数嵌套 一、函数的嵌套定义 二、函数的嵌套调用 七、名称空间和作用域 一、名称空间 二、作用域 三、补充知识点 今日总结 一、函数的返回值 一、什么是返回值 函数内部代码经过一些列逻辑处理获得的结果。 def func(): name = 'nick' return name name = func() print(name) nick 二、为什么要有返回值? 现在有一个需求,比较两个人的月薪,然后想获取月薪较大人的年薪。 如果需要在程序中拿到函数的处理结果做进一步的处理,则需要函数必须要有返回值。 需要注意的是: return是一个函数结束的标志,函数内可以有多个return,只要执行到return,函数就会执行。 return的返回值可以返回任意数据类型 return的返回值无个数限制,即可以使用逗号隔开返回多个值 0个:返回None 1个:返回值是该值本身 多个:返回值是元组 #

Lambda 表达式

二次信任 提交于 2019-11-27 02:26:05
前言 前片文章讲到,使用匿名类来表示不同的行为并不令人满意:代码十分啰嗦,这会影响程序 员在实践中使用行为参数化的积极性。在本章中,我们会教给你Java 8中解决这个问题的新工 具——Lambda表达式。它可以让你很简洁地表示一个行为或传递代码。现在你可以把Lambda 表达式看作匿名功能,它基本上就是没有声明名称的方法,但和匿名类一样,它也可以作为参 数传递给一个方法。 本章的行文思想就是教你如何一步一步地写出更简洁、更灵活的代码。 Lambda 管中窥豹 可以吧Lambda表达式简单的理解为可以可以传递匿名函数的一种形式:它没有名称,但是有参数列表,函数主体,返回类型,甚至还可以有一个可以抛出异常的函数列表. 匿名:我们说匿名,是因为它不像普通的方法那样有一个明确的名称:写得少而想得多! 函数: 我们说它是函数,是因为Lambda函数不像方法那样属于某个特定的类。但和方法一样,Lambda有参数列表、函数主体、返回类型,还可能有可以抛出的异常列表。 传递:Lambda表达式可以作为参数传递给方法或存储在变量中. 简洁:无需像匿名类那样写很多模版代码. 在前面的讲解中,我们写过一个简单的Lambda表达式 可以看到,Lambda表达式有三个部分: 参数列表:这里它采用了 Comparator 中 compare 方法的参数,两个 Apple 。 箭头:把参数和函数主题分开.

局部变量与全局变量

£可爱£侵袭症+ 提交于 2019-11-27 01:28:47
根据C语言的说法,局部变量:定义在方法内部的变量叫局部变量;全局变量:定义在方法外部的变量叫全局变量。局部变量和全局变量的主要区别在于二者的生存周期不同。 全局变量的生存周期:静态分配内存,程序运行期间常驻内存,直到程序运行结束。 局部变量的生存周期:动态分配内存,位于线程堆栈中。 另外全局变量和局部变量的作用域不同,举例来说,类中的变量作用域在当前类中,类方法中的变量作用域在当前方法中。 全局变量的使用场景:多个地方需要使用,大家共享。 局部变量的使用场景:只在当前这个地方使用。 在项目开发中,尽量少使用全局变量(准确地说,应该是尽量缩小变量的作用域)。为什么尽量少使用全局变量? 首先,不符合高内聚、低耦合的原则,维护困难。举例来说:全局变量相当于公家的东西,好处是大家都可以很方便的使用,坏处是大家都可以随便使用,会引起冲突,你用的时候也不知道别人做了什么手脚(不符合函数式编程原则),因此很难管理。 其次,使用全局变量不符合延迟加载的原则,延迟加载说的是,等到真正用到的时候,再加载相应的东西到内存中。而使用全局变量相当于一开始,就把所有需要的东西加载进来。举例来说:我们出去旅游,没有必要带上所有的东西吧,比如米饭,我们可以在旅游地买米饭吃。 但是,尽量少用,并不意味着不用,有些时候必须要用。还是上面出去旅游的例子,旅游过程中,你的钱包要始终带着,因为到处需要钱,这就是全局。