{

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语言中返回局部变量和局部指针变量相关推荐

  1. c/c++排坑(4) -- c/c++中返回局部变量

    返回c语言中的局部变量 先看一段代码猜猜,打印值: #include <iostream> using namespace std; char * func(); int main() { ...

  2. c语言课程设计找出肇事车牌,C语言课程设计报告.doc

    C语言课程设计报告 <C语言程序设计> 课程设计报告 (学年 第 学期) 专 业: 班 级: 姓名学号: 姓 名: 指导教师: 成 绩: 目 录 一.课程设计的目的与要求--------- ...

  3. 【初识C语言】如何写出第一个C语言代码

    如何写代码? 1.写出主函数(main函数) 如何执行?-c语言是从主函数的第一行开始执行的 所以c语言代码中得有mian函数-入口 printf -库函数-在屏幕上打印信息 printf 的使用,也 ...

  4. 理解C语言中的空指针和野指针

    在C语言中,指针是一个非常重要的概念,可以用于操作变量和数据结构.但是,指针也是很容易出错的地方.其中包括两种可能的错误:空指针和野指针. 空指针 空指针指代无效的地址,表示指针不指向内存中的任何一个 ...

  5. C语言的那些秘密之---函数返回局部变量

    一般的来说,函数是可以返回局部变量的. 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了.因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错.但是如果返回的是局部变量的地 ...

  6. C语言的那些秘密之---函数返回局部变量(转)

    原文地址:http://blog.csdn.net/haiwil/article/details/6691854/ 一般的来说,函数是可以返回局部变量的. 局部变量的作用域只在函数内部,在函数返回后, ...

  7. 用指针写出strcmp函数

    题目:用指针写出strcmp函数. 思考:此题目和用指针写出strcpy函数一样.使用递归的思想,函数功能就是当s1和s2相等时,函数返回值为0,如果s1>s2时,函数返回值为正整数,s1< ...

  8. c语言程序设计 北京理工,北京理工大学《C语言程序设计》期末试题.pdf

    北京理工大学<C语言程序设计>期末试题 随米云打印 网址:sui.me 北京理工大学<C语言程序设计>期末试题及答案 一.选择题(共24分,每题2分) 1.下列不可以用作C语言 ...

  9. 细节----函数返回局部变量

    先来看一个例子作为引入: #include <stdio.h> #include <stdlib.h>int *test() {int num = 3;return # }in ...

最新文章

  1. 20145231 《信息安全系统设计基础》第11周学习总结
  2. [原创]Java性能优化权威指南读书思维导图
  3. .NetCore Winform控制台 做HTTP Host,简易接口
  4. Kubernetes搭建Zookeeper和Kafka集群
  5. CFCC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries
  6. linux学习笔记-第一课-linux的历史,安装linux,远程连接
  7. Python基础day01【软件安装、变量的定义和使用、数据类型、标识符和关键字、输入输出、数据类型转换、运算符、PEP 8 规范】
  8. idea提示 cannot resolve symbol “println
  9. mysql 5.6.31 winx64_详解介绍MySQL5.6.31winx64.zip安装配置的图文教程
  10. php上传文件简单类
  11. Earthquake
  12. mysql驱动和url在5.7以上版本变化
  13. md5加密离线工具windwos,ubuntu
  14. 计算机汇编语言编程教程,《汇编语言程序设计教程》.pdf
  15. Qt 添加 QtNetwork 库文件(包括vs中和qt中)
  16. 【新知实验室】实时音视频(TRTC)之初体验
  17. 南卫理公会大学计算机科学,南卫理公会大学计算机科学与工程硕士
  18. python抓取数据库数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储...
  19. 理解算法的有穷性和程序的无穷性
  20. 数据仓库—stg层_有赞数据仓库实践之路

热门文章

  1. Json对象与Json字符串互转(4种转换方式)
  2. 【学习】计算几何初步
  3. linux内核定义注册设备,linux字符型设备驱动 一.注册设备并创建设备文件
  4. bat 域 本机管理员密码_Windows域中特殊的用户-计算机对象攻防
  5. oracle批量插入并且返回自增主键_oracle 自增主键实现批量更新和增加sql
  6. 在oracle备份数据库,Oracle在A机器上备份了数据库,到B机器上恢复时,怎么进行下去?...
  7. python dataframe是什么_python – 逐个构建DataFrame的最快方法是什么?
  8. 【控制】《现代控制理论》谢克明老师-第1章-控制系统的状态空间描述
  9. 第二章 单变量线性回归-机器学习老师板书-斯坦福吴恩达教授
  10. STM32 进阶教程 16 - ADC1与ADC2同步采样