c语言深入理解<3>

来源:互联网 发布:阿里云 规则引擎 编辑:程序博客网 时间:2024/05/22 00:51
/***********************************//Exanple 1#include<stdio.h>void display(char *);//指针做形参void main()//如果没有void,默认为int类型,可能出现错误{char s[]="abcd";display(s);system("pause");}void display(char *s){int i=0;for(i=0;i<4;i++)printf("%c\n",*(s+i));//地址加1,并不是按字节移动,而是按类型移动。//如果指针指向int类型,s+1移动2个或4个字节(根据系统不同而不同)}************************************//Example2#include<stdio.h>void main()//如果没有void,默认为int类型,可能出现错误{int i=10,j=010;printf("%d,%d\n",i,j);//如果int类型以0开始,编译器会将其作为8进制处理//输出为:10,8system("pause");}*************************************/#include<stdio.h>#include <malloc.h>// 全局变量定义int iGlobalInt1=0;int iGlobalInt2=0;int iGlobalInt3=0;// 全局常量定义const int iGlobalConstInt1=1;const int iGlobalConstInt2=5;const int iGlobalConstInt3=6;// 全局静态变量定义static int iGlobalStaticInt1=0;static int iGlobalStaticInt2=0;static int iGlobalStaticInt3=0;void funcParamTest(int iFuncParam1,int iFuncParam2,int iFuncParam3){// 函数私有变量定义int iLocalInt1=iFuncParam1;int iLocalInt2=iFuncParam2;int iLocalInt3=iFuncParam3;printf(" 函数参数变量内存地址 \n");printf("iFuncParam1= 0x%08x\n ",&iFuncParam1);printf("iFuncParam2=0x%08x\n",&iFuncParam2);printf("iFuncParam3=0x%08x\n\n",&iFuncParam3);printf(" 函数本地变量的内存地址 \n");printf("iLocalInt1=0x%08x\n",&iLocalInt1);printf("iLocalInt2=0x%08x\n",&iLocalInt2);printf("iLocalInt3=0x%08x\n\n",&iLocalInt3);}void main()//如果没有void,默认为int类型,可能出现错误{// 局部静态变量static int iStaticInt1=0;static int iStaticInt2=0;static int iStaticInt3=0;// 局部静态常量定义const static int iConstStaticInt1=0;const static int iConstStaticInt2=0;const static int iConstStaticInt3=0;// 局部常量const int iConstInt1=1;const int iConstInt2=5;const int iConstInt3=6;// 局部变量int iLocalInt1=0;int iLocalInt2=0;int iLocalInt3=0;char * pMalloc1,*pMalloc2,*pMalloc3;char * pNew1,*pNew2,*pNew3;printf(" 全局常量的内存地址 \n");printf("iGlobalConstInt1=0x%08x\n",&iGlobalConstInt1);printf("iGlobalConstInt2=0x%08x\n",&iGlobalConstInt2);printf("iGlobalConstInt3=0x%08x\n\n",&iGlobalConstInt3);printf("iConstStaticInt1=0x%08x\n",&iConstStaticInt1);printf("iConstStaticInt2=0x%08x\n",&iConstStaticInt2);printf("iConstStaticInt3=0x%08x\n\n",&iConstStaticInt3);printf(" 全局变量的内存地址 \n");printf("iGlobalInt1=0x%08x\n",&iGlobalInt1);printf("iGlobalInt2=0x%08x\n",&iGlobalInt2);printf("iGlobalInt3=0x%08x\n\n",&iGlobalInt3);printf(" 静态变量的内存地址 \n");printf("iGlobalStaticInt1=0x%08x\n",&iGlobalStaticInt1);printf("iGlobalStaticInt2=0x%08x\n",&iGlobalStaticInt2);printf("iGlobalStaticInt3=0x%08x\n\n",&iGlobalStaticInt3);printf("iStaticInt1=0x%08x\n",&iStaticInt1);printf("iStaticInt2=0x%08x\n",&iStaticInt2);printf("iStaticInt3=0x%08x\n\n",&iStaticInt3);printf(" 本地变量的内存地址 \n");printf("iConstInt1=0x%08x\n",&iConstInt1);printf("iConstInt2=0x%08x\n",&iConstInt2);printf("iConstInt3=0x%08x\n\n",&iConstInt3);printf("iLocalInt1=0x%08x\n",&iLocalInt1);printf("iLocalInt2=0x%08x\n",&iLocalInt2);printf("iLocalInt3=0x%08x\n\n",&iLocalInt3);funcParamTest(iLocalInt1,iLocalInt2,iLocalInt3);// 在堆上分配内存,使用 new//pNew1=new char[16];//pNew1=new char[16];//pNew2=new char[16];//pNew3=new char[16];// 在堆上分配内存,使用 mallocpMalloc1 = (char *)malloc( 16 );pMalloc2 = (char *)malloc( 16 );pMalloc3 = (char *)malloc( 16 );printf(" 在堆上分配内存内存地址 \n");printf("pMalloc1=0x%08x\n",pMalloc1);printf("pMalloc2=0x%08x\n",pMalloc2);printf("pMalloc3=0x%08x\n\n",pMalloc3);// 释放 new 分配的内存空间//delete [] pNew1;//delete [] pNew2;//delete [] pNew3;//pNew1=NULL;//pNew2=NULL;//pNew3=NULL;// 释放 malloc 分配的内存空间free(pMalloc1);free(pMalloc2);free(pMalloc3);pMalloc1=NULL;pMalloc2=NULL;pMalloc3=NULL;system("pause");}//可以很清楚的看出内存分配

参考:c陷阱与缺陷

c语言内存管理

原创粉丝点击