c语言的局部指针,C中局部变量指针问题
先提问题,在类似如下的函数中:
char *GetMemory(void)
{
char p[] = "hello world";
printf("%p\n",p);
return p;
}
问题1:
printf("%p\n",p); // 对p的有什么影响?请对比GetMemory0和GetMemory1
问题2:
p[1] = 'a'; //这个的先后顺序不同,为啥结果不一样?请对比GetMemory2和GetMemory3
已知见解:
char* p = "hello world";
是一个指向常量区地址的指针。
char p[] = "hello world";
是局部字符串数组,会把"hello world"拷贝到函数栈中.
printf("%p",p)会修改栈的中数据的释放原则?
代码示例:
char *GetMemory0(void)
{
char p[] = "hello world";
return p;
}
char *GetMemory1(void)
{
char p[] = "hello world";
printf("%p\n",p);
return p;
}
char *GetMemory2(void)
{
char p[] = "hello world";
printf("%p\n",p);
p[1] = 'a';
return p;
}
char *GetMemory3(void)
{
char p[] = "hello world";
p[1] = 'a';
printf("%p\n",p);
return p;
}
char *GetMemory4(void)
{
char *p = "hello world";
return p;
}
char *GetMemory5(void)
{
char *p = "hello world";
printf("%p\n",p);
return p;
}
int main()
{
char *str = NULL;
str = GetMemory0();
printf(str);
printf("\n---0---\n");
str = GetMemory1();
printf(str);
printf("\n---1---\n");
str = GetMemory2();
printf(str);
printf("\n---2---\n");
str = GetMemory3();
printf(str);
printf("\n---3---\n");
str = GetMemory4();
printf(str);
printf("\n---4---\n");
str = GetMemory5();
printf(str);
printf("\n---5---\n");
}
运行结果为:
0(M�
---0---
0x7fff184d2720
hello world
---1---
0x7fff184d2720
hello world
---2---
0x7fff184d2720
hallo world
---3---
hello world
---4---
0x400988
hello world
---5---
编译过程:
g++ --version
g++ (GCC) 4.8.2 20140206 (prerelease)
g++ -Wall -O -g -c test.cpp -o test.o
test.cpp: 在函数‘char* GetMemory0()’中:
test.cpp:4:10: 警告:返回了局部变量的‘p’的地址 [-Wreturn-local-addr]
char p[] = "hello world";
^
test.cpp: 在函数‘char* GetMemory1()’中:
test.cpp:9:10: 警告:返回了局部变量的‘p’的地址 [-Wreturn-local-addr]
char p[] = "hello world";
^
test.cpp: 在函数‘char* GetMemory2()’中:
test.cpp:15:10: 警告:返回了局部变量的‘p’的地址 [-Wreturn-local-addr]
char p[] = "hello world";
^
test.cpp: 在函数‘char* GetMemory3()’中:
test.cpp:22:10: 警告:返回了局部变量的‘p’的地址 [-Wreturn-local-addr]
char p[] = "hello world";
^
test.cpp: 在函数‘char* GetMemory4()’中:
test.cpp:29:15: 警告:不建议使用从字符串常量到‘char*’的转换 [-Wwrite-strings]
char *p = "hello world";
^
test.cpp: 在函数‘char* GetMemory5()’中:
test.cpp:34:15: 警告:不建议使用从字符串常量到‘char*’的转换 [-Wwrite-strings]
char *p = "hello world";
^
g++ -Wall -O -g test.o -o ./test -lpthread -lstdc++
chmod a+x ./test
c语言的局部指针,C中局部变量指针问题相关推荐
- pascal指针 c语言指针,Pascal中的指针运算指南(与C比较).doc
Pascal中的指针运算指南(与C比较) Pascal中的指针运算指南(与C比较) Pascal中的指针运算指南(与C比较) 大家都认为,c语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用 ...
- c语言下标法与指针法,《C和指针》中关于指针与下标的问题
int array[10], 说明数组元素为整形. 取得a的值,并把它与整形的长度(也就是4)相乘,就是根据下标a,乘以4(整形量所占内存的字节数),所得结果就是下标变量相对数组起始位置的偏移,也就 ...
- 指针java_Java中的指针
Java语言有一个优点就是它相对其他编程语言(例如C语言)摒弃了指针的数据类型,但是否真的摒弃了还得仔细研究一下java的内部机制. Java中的堆栈 Java堆栈都在Ram中,与其他一些语言不同的是 ...
- c语言中指针的类型,学习C语言中的指针类型
摘要:结合我院学生十年来参加全国计算机等级考试(C语言部分)情况,通过分析成绩分布与题型关系,我们发现指针方面的题型失分率最高.在此基础上结合教学实际,本文提出学习指针知识的方法和顺序过程,并将其应用 ...
- c语言指针++_C和C ++中的指针
c语言指针++ C中的指针是什么? (What is Pointer in C?) A pointer is a variable that holds the address of another ...
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- swift学习笔记-----swift中的指针
swift语言为了简化,把指针隐形化了.没有像OC中那样的" * ".把底层的问题交给C语言去处理,我们可以在swift中调用C 语言来解决.当然,OC也是可以调用的. 但是在某些 ...
- 彻底理解——指针常量和常量指针、指向常量的常指针
前言 在汉语中,定语一般都放在中心词的前面,像C语言和C++语言这种技术性语言,更是如此. 所以定语重要还是中心词重要,肯定是中心词重要. 如:美丽的女孩 美丽的是定语 女孩是中心词 ...
- 指针数组和数组指针——兄弟你的括号呢?
指针数组和数组指针--兄弟你的括号呢? 参考:http://www.cnblogs.com/Romi/archive/2012/01/10/2317898.html 指针数组:array of poi ...
最新文章
- 【青少年编程】【四级】创意画图
- 解决svn uuid变更问题
- 阿里云搭建git mac客户端 2个git账号
- Junit测试报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
- C# 调用python
- 投资理财web后端系统_如何挑选现金类理财产品?三大对比了解一下
- 年薪最低十万签订协议
- 计算机秘密程序 听课反思,《编制计算机程序解决问题》的教学反思
- 使用Redis单实例实现分布式锁
- 中国5G牌照或于今日发放 我国将正式进入5G时代
- 中物院计划建国内一流科学仪器研发基地
- 模模搭古城搭建学习笔记2:基础设施篇
- python爬取图片失败显示404_django使用图片延时加载引起后台404错误
- 如何理解光圈、ISO、快门、曝光这几个概念?
- 哈工大计算机854考研经验分享
- Kotlin上的反应式流-SharedFlow和StateFlow
- telegram电报机器人配置
- 人工智能会破灭嘛?听听福布斯邀请的这50位大拿怎么说
- 数据结构——KMP(串)
- 1-SIM卡复位ATR解析
热门文章
- html div三角形,【div】纯CSS绘制三角形
- datagridview设置某一行选中_机关公文格式设置规范(最新版)
- python旋转matplotlib绘制的三维图
- IDEA(Pycharm)一家子常用快捷键Keymap对应的英文、中文与具体位置
- java逆向框架,Android逆向之逆向框架层
- pytorch 中的数据类型,tensor的创建
- Open Live Writer - TargetInvocationException
- Firefox 不响应 event.keyCode 问题的解决方案
- c# 基本语法(转)
- Web压力测试工具 - Siege