c语言用指针带出局部变量,关于C语言中返回局部变量和局部指针变量
{
char b[10] = "abcde";
return b;
}
char *test1_ver2(void)
{
static char b[10] = "abcde";
return b;
}
char *test2(void)
{
char c[10] = "abcde";
char *pStr = c;
return pStr;
}
char *test3(void)
{
char *c = "abcdef";
return c;
}
test1不能运行,甚至可能无法编译通过;因为char b[10] 是局部变量,其存放在栈上,在函数执行完成就会被释放。而返回它存放的地址,此时已经是可能是个非法地址。
test1_ver2可以正确运行,在test1中,我们说test1不能运行或出现编译错误的原因是 b[]数组在函数执行结束后会被释放,如果我们再对其存放空间进行访问就会出错,此时我们定义static char b[10]; 将其存放在静态存储区,只有在程序运行结束后才会被系统回收,即使退出该函数,b[]数组存放的静态存储区始终存在,所以,我们再对其进行访问,不会出现错误
test2可以运行。c[10]和*pStr均保存在栈中;该函数返回值是保存在pStr指针中的c数组在栈中的存放地址,当调用该函数时,该地址被复制到外部的指针变量中,然后,保存在栈上的c[]数组和pStr指针的内存空间被释放。c[]数组的存放地址是被传送出去了的,但是,由于c[]是局部变量, 在函数执行完成后,存放的内存空间就被释放,所以,在外部通过指针访问c[]数组时,指向的内存空间无效,而且还可能出现访问非法内存的危险。虽然这样能够运行,但是没有实际效果
test3可以运行。*c指针c是保存在栈中,"abcdef"字符串保存在文字常量区,其存放空间,直到程序执行结束才会被系统回收。所以,返回它的地址是一个实际存在的有效地址。
c语言用指针带出局部变量,关于C语言中返回局部变量和局部指针变量相关推荐
- c/c++排坑(4) -- c/c++中返回局部变量
返回c语言中的局部变量 先看一段代码猜猜,打印值: #include <iostream> using namespace std; char * func(); int main() { ...
- c语言课程设计找出肇事车牌,C语言课程设计报告.doc
C语言课程设计报告 <C语言程序设计> 课程设计报告 (学年 第 学期) 专 业: 班 级: 姓名学号: 姓 名: 指导教师: 成 绩: 目 录 一.课程设计的目的与要求--------- ...
- 【初识C语言】如何写出第一个C语言代码
如何写代码? 1.写出主函数(main函数) 如何执行?-c语言是从主函数的第一行开始执行的 所以c语言代码中得有mian函数-入口 printf -库函数-在屏幕上打印信息 printf 的使用,也 ...
- 理解C语言中的空指针和野指针
在C语言中,指针是一个非常重要的概念,可以用于操作变量和数据结构.但是,指针也是很容易出错的地方.其中包括两种可能的错误:空指针和野指针. 空指针 空指针指代无效的地址,表示指针不指向内存中的任何一个 ...
- C语言的那些秘密之---函数返回局部变量
一般的来说,函数是可以返回局部变量的. 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了.因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错.但是如果返回的是局部变量的地 ...
- C语言的那些秘密之---函数返回局部变量(转)
原文地址:http://blog.csdn.net/haiwil/article/details/6691854/ 一般的来说,函数是可以返回局部变量的. 局部变量的作用域只在函数内部,在函数返回后, ...
- 用指针写出strcmp函数
题目:用指针写出strcmp函数. 思考:此题目和用指针写出strcpy函数一样.使用递归的思想,函数功能就是当s1和s2相等时,函数返回值为0,如果s1>s2时,函数返回值为正整数,s1< ...
- c语言程序设计 北京理工,北京理工大学《C语言程序设计》期末试题.pdf
北京理工大学<C语言程序设计>期末试题 随米云打印 网址:sui.me 北京理工大学<C语言程序设计>期末试题及答案 一.选择题(共24分,每题2分) 1.下列不可以用作C语言 ...
- 细节----函数返回局部变量
先来看一个例子作为引入: #include <stdio.h> #include <stdlib.h>int *test() {int num = 3;return # }in ...
最新文章
- 20145231 《信息安全系统设计基础》第11周学习总结
- [原创]Java性能优化权威指南读书思维导图
- .NetCore Winform控制台 做HTTP Host,简易接口
- Kubernetes搭建Zookeeper和Kafka集群
- CFCC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries
- linux学习笔记-第一课-linux的历史,安装linux,远程连接
- Python基础day01【软件安装、变量的定义和使用、数据类型、标识符和关键字、输入输出、数据类型转换、运算符、PEP 8 规范】
- idea提示 cannot resolve symbol “println
- mysql 5.6.31 winx64_详解介绍MySQL5.6.31winx64.zip安装配置的图文教程
- php上传文件简单类
- Earthquake
- mysql驱动和url在5.7以上版本变化
- md5加密离线工具windwos,ubuntu
- 计算机汇编语言编程教程,《汇编语言程序设计教程》.pdf
- Qt 添加 QtNetwork 库文件(包括vs中和qt中)
- 【新知实验室】实时音视频(TRTC)之初体验
- 南卫理公会大学计算机科学,南卫理公会大学计算机科学与工程硕士
- python抓取数据库数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储...
- 理解算法的有穷性和程序的无穷性
- 数据仓库—stg层_有赞数据仓库实践之路
热门文章
- Json对象与Json字符串互转(4种转换方式)
- 【学习】计算几何初步
- linux内核定义注册设备,linux字符型设备驱动 一.注册设备并创建设备文件
- bat 域 本机管理员密码_Windows域中特殊的用户-计算机对象攻防
- oracle批量插入并且返回自增主键_oracle 自增主键实现批量更新和增加sql
- 在oracle备份数据库,Oracle在A机器上备份了数据库,到B机器上恢复时,怎么进行下去?...
- python dataframe是什么_python – 逐个构建DataFrame的最快方法是什么?
- 【控制】《现代控制理论》谢克明老师-第1章-控制系统的状态空间描述
- 第二章 单变量线性回归-机器学习老师板书-斯坦福吴恩达教授
- STM32 进阶教程 16 - ADC1与ADC2同步采样