VC++6.0下C语言全局变量、静态变量、数组、指针

来源:互联网 发布:weka 数据挖掘 编辑:程序博客网 时间:2024/06/03 17:27


// project02.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "stdafx.cpp"#include <stdio.h>int g_nTest=3;//定义全局变量void test01(){float a=1234567.8e2+20;printf("%f\n",a);double b=1234567.8e2+20;printf("%lf\n",b);}void test02(int argc){int i=2;i=8;i=sizeof(argc);i=sizeof(20.5f);i=sizeof(float);i=sizeof("abcd1245");printf("%d",i);i=sizeof(char);printf("%d",i);char a[4]={'a','a','a','a'};i=sizeof(a);printf("%d",i);}void test03(int n){static int nStat=0;//定义静态局部变量int a=0;nStat +=n; //调用静态变量a+=n;printf("n=%-14d address=0x%p\n",n,&n);//打印变量和地址printf("nStat=%-14d address=0x%p\n",nStat,&nStat);//打印静态变量和地址printf("a=%-14d address=0x%p\n",a,&a);//打印静态变量和地址}void test04(){int i=0;int a[10]={1,2,3};while(i<sizeof(a)/sizeof(a[0])){a[i] -=i;++i;}i=0;while(i<sizeof(a)/sizeof(a[0])){printf("a[%d]=%d\n",i,a[i]);++i;}}int* test05(int a[],int len){//int a1=sizeof(a);//int a2=sizeof(a[0]);//printf("%d,%d",a1,a2);//int len=a1/a2;//printf("len=%d\n",len);for(int i=0;i<len;i++){for(int j=0;j<len-i-1;j++){if(a[j]>a[j+1]){int temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}return a;}//数组做参数时://可以不指定长度,也可以随便指定任何长度//数组做参数时性质已经变了,本质上只传递了数组的地址(指针)给形参.//数组的空间特征已经消失了,无法通过形参获取数组元素的个数//sizeof获取的形参大小是4,因为任何指针大小都是4个字节void test06(int a[],int len){//int a1=sizeof(a);//int a2=sizeof(a[0]);//printf("%d,%d",a1,a2);//int len=a1/a2;//1printf("len=%d\n",len);for(int i=0;i<len;i++){printf("%d\n",a[i]);}}void test07(){char str1[10]={'a','b'};unsigned char str4[10]={'a','a'};char str2[10]="";char str3[10]="cc";//unsiged char不行puts(str1);//puts(str4);puts(str2);puts(str3);}void test08(){int i=0x12345678;char *pc=(char *)&i;//指向内存上的1个字节char c=pc[0];  //78pc[0]=pc[3];//p[0]的类型是charpc[3]=c;//%p %x 都是16进制打印,%p多用于地址printf("i的数值是:0x%x\n,i的地址是:0x%p\n",i,&i);printf("pc的地址是:0x%x\n,c的地址是:0x%p\n",&pc,&c);printf("c的值是:%x\n",c);c=pc[1];  //56pc[1]=pc[2];pc[2]=c;//%p %x 都是16进制打印,%p多用于地址printf("i的数值是:0x%x\n,i的地址是:0x%p\n",i,&i);printf("pc的地址是:0x%x\n,c的地址是:0x%p\n",&pc,&c);printf("c的值是:%x\n",c);}void test09(){int i=0x12345678;//char *pc=(char *)&i;//char c=pc[0];int *pc=&i; //指向int型,移动4个字节int c=pc[0];//12345678pc[0]=pc[3];//p[0]的类型是int  越界 编译不检查指针越界 会引起软件崩溃pc[3]=c;  //%p %x 都是16进制打印,%p多用于地址printf("i的数值是:0x%x\n,i的地址是:0x%p\n",i,&i);printf("pc的地址是:0x%x\n,c的地址是:0x%p\n",&pc,&c);printf("c的值是:%x\n",c);printf("%d\n",sizeof(pc));c=pc[1];pc[1]=pc[2];pc[2]=c;//%p %x 都是16进制打印,%p多用于地址printf("i的数值是:0x%x\n,i的地址是:0x%p\n",i,&i);printf("pc的地址是:0x%x\n,c的地址是:0x%p\n",&pc,&c);printf("c的值是:%x\n",c);}void test10(){int i=0x12345678;int j=-1;int *p=&i;//int p1=&i;//cannot convert from 'int *' to 'int'//指针变量使用规则://1。指针变量不能直接使用整数变量或常量赋值//2。各种不同种类的指针变量之间不能直接赋值//3。当指针变量指向了某个内存地址,就可以通过*符号或[]符号,读写内存数据//4。读写覆盖的内存长度,由指针类型决定//5。使用了*或[]后,指针变量降级为它的指向类型。}void test11(){int a1=666;int a2=9;int a3=8;int *p=&a3;printf("a1的地址:%p,a1的值:%p\n",&a1,a1);printf("a2的地址:%p,a2的值:%p\n",&a2,a2);printf("a3的地址:%p,a3的值:%p\n",&a3,a3);printf("p的地址:%p\n",&p);printf("p的值:%p\n",*p);//p[0]等价*pprintf("===========\n");p++;//偏移sizeof(int)printf("p的地址:%p\n",&p);printf("p的值:%p\n",*p);//p[0]等价*pprintf("===========\n");p++;printf("p的地址:%p\n",&p);printf("p的值:%p\n",*p);//p[0]等价*p}void test12(){int i=0x12345678;int j=-1;int *p,k=200;p=&k;i=*p;*p=j;*p=100;*(p+2)=300;//p[2]=300;*(p+3)=400;//p[3]=400;printf("i的地址=%p,j的地址=%p,k的地址=%p\n",&i,&j,&k);printf("i=%d,j=%d,k=%d\n",i,j,k);}int main(int argc, char* argv[]){//test01();//test02(argc);//test03(5);//test03(6);//printf("b=%d\n",b);//test04();//int a[]={1,5,3};//int a1=sizeof(a);//int a2=sizeof(a[0]);//printf("%d,%d",a1,a2);//int len=a1/a2;//3 注意sizeof是编译时的//int hello(int a[])跟 int hello(int *a)是等价的, ////数组名做参数,会退化成指针,无法知道数组长度。//test05(a,len);//test06(a,len);//test07();//test08();//test09();//test10();test11();//test12();return 0;} 


// stdafx.cpp : source file that includes just the standard includes//project02.pch will be the pre-compiled header//stdafx.obj will contain the pre-compiled type information#include "stdafx.h"#include <stdio.h>// TODO: reference any additional headers you need in STDAFX.H// and not in this fileextern int b2=0;


阅读全文
0 0