c语言深入理解<3>

/***********************************
//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,8
	system("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];
	// 在堆上分配内存,使用 malloc
	pMalloc1 = (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语言内存管理

阅读更多
个人分类: c语言深入理解
想对作者说点什么? 我来说一句

深入理解C指针(带书签完整版).pdf

2015年09月15日 41.75MB 下载

深入理解C#第三版,高清原版

2017年10月30日 16.54MB 下载

深入理解C语言指针的奥秘.doc

2011年12月08日 68KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭