C/C++内存分配区

#ifndef _ATS_TEST_STA_
#define _ATS_TEST_STA_
#include <stdlib.h>
#include <stdio.h> int a; //声明
void f(); #endif
function.c
#include "test.h" void f()
{
printf("a = %d, &a = %p\n", a, &a);
a = ;
printf("a = %d, &a = %p\n", a, &a);
}
main.c
#include <stdlib.h>
#include <stdio.h> #include "test.h" int main()
{
printf("a = %d, &a = %p\n----------------\n", a, &a);
f();
printf("----------------\na = %d, &a = %p\n", a, &a); system("pause");
return ;
}
- 修改头文件test.h为
#ifndef _ATS_TEST_STA_
#define _ATS_TEST_STA_
#include <stdlib.h>
#include <stdio.h> int a = ; //定义
void f(); #endif
编译错误:
fatal error LNK1169: 找到一个或多个多重定义的符号
- 修改头文件test.h为
#ifndef _ATS_TEST_STA_
#define _ATS_TEST_STA_
#include <stdlib.h>
#include <stdio.h> static int a = ; //修改为static
void f(); #endif
aaarticlea/png;base64,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" alt="" />
要合适运用变量的声明、定义。
参考资料
1 C语言中的static 详细分析 http://blog.csdn.net/keyeagle/article/details/6708077
C/C++内存分配区的更多相关文章
- iOS程序中的内存分配 栈区堆区全局区
在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同.一.内存分区 栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等.栈是系统数据结构,对 ...
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等.在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用.和堆一样 ...
- 转:内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]
内存区划分.内存分配.常量存储区.堆.栈.自由存储区.全局区[C++][内存管理][转载] 一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放 ...
- Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法
在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...
- 内存分配方式,堆区,栈区,new/delete/malloc/free
1.内存分配方式 内存分配方式有三种: [1]从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. [2]在栈上创建.在执行函数时 ...
- 【校招面试 之 C/C++】第14题 C++ 内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区(堆栈的区别)
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等.在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用.和堆一样 ...
- 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]
http://www.cnblogs.com/JCSU/articles/1051579.html 一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序 ...
- (转)C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
程序在内存有五个存在区域: A:动态区域中的栈区 B:动态区域中的栈区 C:静态区域中:全局变量 和静态变量 (这个区域又可以进一步细分为:初始化的全局变量和静态变量 以及 未初始 ...
- 转 C/C++内存分配方式与存储区
C/C++内存分配方式与存储区 C/C++内存分配有三种方式:[1]从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量.[2]在栈 ...
随机推荐
- LeetCode:Gray Code(格雷码)
题目链接 The gray code is a binary numeral system where two successive values differ in only one bit. Gi ...
- valueOf和toString
有一道经典的题目: var add = function() {___}; console.log(add(3)(4)(5)); // 输出60 题目要求能无限相乘,请补充add函数. 首先很显然,a ...
- 小白学习mysql之函数
## 导语 曾经我以为,学会了select.update.insert和delete之后,我就学会了数据库~,要不是到公司看到SQL里充满了密密麻麻的的各种函数,我差点就信了~,当初的自己是多么的天真 ...
- python3 入门 (一) 基础语法
1.编码问题 默认情况下,Python 3源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 也可以为源码文件指定不同的编码,在文件头部加上: # coding=gbk 2.关键字 ...
- AngularJS开发指南6:AngularJS表单详解
表单控件(input, select, textarea )是用来获取用户输入的.表单则是一组有联系的表单控件的集合. 用户能通过表单和表单控件提供验证的服务,知道自己的输入是否合法.这样能让用户交互 ...
- Redis——分布式简单使用
Redis简介:Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis安装:参考博客http://www ...
- GCD 深入理解:第一部分
虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objective-C 的平滑世界. ...
- Nginx 实现AJAX跨域请求
在工作中遇到跨域请求的问题: AJAX从一个域请求另一个域会有跨域的问题.那么如何在nginx上实现ajax跨域请求呢?要在nginx上启用跨域请求,需要添加add_header Access-Con ...
- Java基础-ArrayList和LinkedList的区别
大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为Lin ...
- 7.Android之评分条RatingBar和拖动条SeekBar学习
评分条RatingBar和拖动条SeekBar很常见,今天来学习下. (1)RatingBar评分条 如图: <RelativeLayout xmlns:android="http:/ ...