zoukankan      html  css  js  c++  java
  • 16 extern用法、常量字符串的应用

    extern声明多文件共享变量的方法总结一下:

    1).在一个源文件中定义,在其他需要使用的源文件中用extern声明。(仅一处定义,多处extern)

    2).在一个源文件中定义,在其对应的头文件中extern声明,在其他需要使用该共享变量的源文件中包含该头文件即可。(更加标准的做法) 

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    在gcc编译器下,分析下列程序

    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    {
        const char str1[]="abc";
        const char str2[]="abc";
        const char *p1="abc";
        const char *p2="abc";
        printf("%d %d %d %d
    ",str1,str2,p1,p2);
        return 0;
    }

    分析:前两个字符数组,定义在栈上,地址不同。 字符串常量定义在静态区,仅有一份拷贝,所以后面两个指针指向的地址相同。

    分析二:

    在定义char数组时,会将常量字符串中的值拷贝到字符数组中,因而str1与str2指向的位置不同。但是定义的两个char*指针,p1,p2,都是指向常量区的同一个字符串,因而两者相同。

    当把p1,p2改成 &p1,&p2时会发现下列程序的打印结果都是不同的。

    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    {
    	const char str1[]="abc";
    	const char str2[]="abc";
    	const char *p1="abc";
    	const char *p2="abc";
    	printf("%d %d %d %d
    ",str1,str2,&p1,&p2);
    	return 0;
    }
    

    因为p1和p2本来就是指针,它们的值(内容)是常量字符串abc的地址,故p1和p2以%d的形式输出是相同的;而&p1和&p2代表的是p1和p2这2个指针的地址.

    【p1和p2的内容相同,但存储它们的地方(p1和p2自身的地址)是不同的】

    拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
  • 相关阅读:
    如何写UCHOME移动接口
    无限分类数据树形格式化
    linux下安装eclipse
    python编辑器对比和推荐
    黑马程序员面向对象07天6 (final)
    黑马程序员面向对象07天4 (super,this)
    黑马程序员面向对象07天8 (模版方法)
    黑马程序员面向对象07天7 (接口Interface)
    黑马程序员面向对象08天2 (多态)
    黑马程序员面向对象07天2 (抽象类测试)
  • 原文地址:https://www.cnblogs.com/dd2hm/p/7269419.html
Copyright © 2011-2022 走看看