• 堆栈


    #include <stdio.h>
    #include <stdlib.h>
    
    int global_uninit_var;
    int global_init_var1 = 520;
    int global_init_var2 = 880;
    
    void func(void);
    
    void func(void)
    {
    	;
    }
    
    int main(void)
    {
    	int local_var1;
    	int local_var2;
    
    	static int static_uninit_var;
    	static int static_init_var = 456;
    
    	char *str1 = "I love FishC.com!";
    	char *str2 = "You are right!";
    
    	int *malloc_var = (int *)malloc(sizeof(int));
    
    	printf("addr of func -> %p
    ", func);
    	printf("addr of str1 -> %p
    ", str1);
    	printf("addr of str2 -> %p
    ", str2);
    	printf("addr of global_init_var1 -> %p
    ", &global_init_var1);
    	printf("addr of global_init_var2 -> %p
    ", &global_init_var2);
    	printf("addr of static_init_var -> %p
    ", &static_init_var);
    	printf("addr of static_uninit_var -> %p
    ", &static_uninit_var);
    	printf("addr of global_uninit_var -> %p
    ", &global_uninit_var);
    	printf("addr of malloc_var -> %p
    ", malloc_var);
    	printf("addr of local_var1 -> %p
    ", &local_var1);
    	printf("addr of local_var2 -> %p
    ", &local_var2);
    
    	return 0;
    }
    

    代码段:通常用来存放程序执行代码的内存区域

    数据段通常用来存放已经初始化的全局变量和局部静态变量

    bss段存放未初始化的全局变量的一块内存区域

    堆和栈的区别:

    堆由程序员手动申请 栈由系统自动分配

    堆由程序员手动释放,栈由系统自动释放

    #include <stdio.h>
    #include<stdlib.h> 
    int *func(){
    	int *ptr=NULL;
    	ptr=(int*)malloc(sizeof(int));
    	if(ptr==NULL){
    		exit(1);
    	}
    	*ptr=520;
    	return ptr;
    } 
    int main(void)
    {
    int *ptr=NULL;
    ptr=func();
    printf("%d",*ptr);
    free(ptr);
    
    	return 0;
    }

    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    int main(){
    	int *ptr1=NULL;
    	int *ptr2=NULL;//栈局部变量 函数参数 函数返回值 
    	ptr1=(int*) malloc(sizeof(int));//堆中 
    	ptr2=(int*)malloc(sizeof(int));
    	printf("栈%p   %p
    ",&ptr1,&ptr2);
    	printf("堆%p    %p",ptr1,ptr2); 
    }
    
    #include <stdio.h>
    
    int main(void)
    {
    	char a = 0, b = 0;
    	int *p = (int *)&b;
    
    	*p = 258;
    
    	printf("%d %d
    ", a, b);
    
    	return 0;
    }
    

  • 相关阅读:
    C#简单操作XML文件的增、删、改、查
    一个感觉还算可以的验证码生成程序
    安装aclocal1报错问题
    php中soap 的使用实例无需手写WSDL文件,提供自动生成WSDL文件类
    ofstream和ifstream详细用法[转]
    [原]C++ Soap客户端实例
    PHP中文件读、写、删的操作
    C++ Boost Thread 编程指南
    (转)虚函数和纯虚函数区别
    strcpy和memcpy的区别
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/11163460.html
Copyright © 2020-2023  润新知