先提问题,在类似如下的函数中:

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中局部变量指针问题相关推荐

  1. pascal指针 c语言指针,Pascal中的指针运算指南(与C比较).doc

    Pascal中的指针运算指南(与C比较) Pascal中的指针运算指南(与C比较) Pascal中的指针运算指南(与C比较) 大家都认为,c语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用 ...

  2. c语言下标法与指针法,《C和指针》中关于指针与下标的问题

    int array[10],  说明数组元素为整形. 取得a的值,并把它与整形的长度(也就是4)相乘,就是根据下标a,乘以4(整形量所占内存的字节数),所得结果就是下标变量相对数组起始位置的偏移,也就 ...

  3. 指针java_Java中的指针

    Java语言有一个优点就是它相对其他编程语言(例如C语言)摒弃了指针的数据类型,但是否真的摒弃了还得仔细研究一下java的内部机制. Java中的堆栈 Java堆栈都在Ram中,与其他一些语言不同的是 ...

  4. c语言中指针的类型,学习C语言中的指针类型

    摘要:结合我院学生十年来参加全国计算机等级考试(C语言部分)情况,通过分析成绩分布与题型关系,我们发现指针方面的题型失分率最高.在此基础上结合教学实际,本文提出学习指针知识的方法和顺序过程,并将其应用 ...

  5. c语言指针++_C和C ++中的指针

    c语言指针++ C中的指针是什么? (What is Pointer in C?) A pointer is a variable that holds the address of another ...

  6. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  7. swift学习笔记-----swift中的指针

    swift语言为了简化,把指针隐形化了.没有像OC中那样的" * ".把底层的问题交给C语言去处理,我们可以在swift中调用C 语言来解决.当然,OC也是可以调用的. 但是在某些 ...

  8. 彻底理解——指针常量和常量指针、指向常量的常指针

    前言   在汉语中,定语一般都放在中心词的前面,像C语言和C++语言这种技术性语言,更是如此.   所以定语重要还是中心词重要,肯定是中心词重要.   如:美丽的女孩 美丽的是定语 女孩是中心词    ...

  9. 指针数组和数组指针——兄弟你的括号呢?

    指针数组和数组指针--兄弟你的括号呢? 参考:http://www.cnblogs.com/Romi/archive/2012/01/10/2317898.html 指针数组:array of poi ...

最新文章

  1. 【青少年编程】【四级】创意画图
  2. 解决svn uuid变更问题
  3. 阿里云搭建git mac客户端 2个git账号
  4. Junit测试报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
  5. C# 调用python
  6. 投资理财web后端系统_如何挑选现金类理财产品?三大对比了解一下
  7. 年薪最低十万签订协议
  8. 计算机秘密程序 听课反思,《编制计算机程序解决问题》的教学反思
  9. 使用Redis单实例实现分布式锁
  10. 中国5G牌照或于今日发放 我国将正式进入5G时代
  11. 中物院计划建国内一流科学仪器研发基地
  12. 模模搭古城搭建学习笔记2:基础设施篇
  13. python爬取图片失败显示404_django使用图片延时加载引起后台404错误
  14. 如何理解光圈、ISO、快门、曝光这几个概念?
  15. 哈工大计算机854考研经验分享
  16. Kotlin上的反应式流-SharedFlow和StateFlow
  17. telegram电报机器人配置
  18. 人工智能会破灭嘛?听听福布斯邀请的这50位大拿怎么说
  19. 数据结构——KMP(串)
  20. 1-SIM卡复位ATR解析

热门文章

  1. html div三角形,【div】纯CSS绘制三角形
  2. datagridview设置某一行选中_机关公文格式设置规范(最新版)
  3. python旋转matplotlib绘制的三维图
  4. IDEA(Pycharm)一家子常用快捷键Keymap对应的英文、中文与具体位置
  5. java逆向框架,Android逆向之逆向框架层
  6. pytorch 中的数据类型,tensor的创建
  7. Open Live Writer - TargetInvocationException
  8. Firefox 不响应 event.keyCode 问题的解决方案
  9. c# 基本语法(转)
  10. Web压力测试工具 - Siege