现在的位置: 首页 > 综合 > 正文

C++学习的时候遇到的问题

2013年08月25日 ⁄ 综合 ⁄ 共 3621字 ⁄ 字号 评论关闭

/*

 

声明如果没有声明的话三个函数不变

 

 

 

在没有char cd[]="44523";这句话

程序头为

#include<stdio.h>

#include<stdlib.h>

char ga[]="abcdefghijklm";

结果如下

addr of global array=0X402000

addr of ga[0]=0X402000

addr of ga[1]=0X402001

14

addr of array param=0x22ff20

addr of ca[0]=0x402000

addr of ca[1]=0x402001

++ca=0X402001

addr of array param=0x22ff20

addr of ca[0]=0x402000

addr of ca[1]=0x402001

++ca=0X402001

1

请按任意键继续. . .

 

在加上char cd;后

程序头变为

#include<stdio.h>

#include<stdlib.h>

char cd

char ga[]="abcdefghijklm";

 

结果

addr of global array=0X404010

addr of global array=0X402000

addr of ga[0]=0X402000

addr of ga[1]=0X402001

14

addr of array param=0x22ff20

addr of ca[0]=0x402000

addr of ca[1]=0x402001

++ca=0X402001

addr of array param=0x22ff20

addr of ca[0]=0x402000

addr of ca[1]=0x402001

++ca=0X402001

1

请按任意键继续. . .

 

在程序头为

#include<stdio.h>

#include<stdlib.h>

int cd

char ga[]="abcdefghijklm";

结果是

addr of global array=0X404010

addr of global array=0X402000

addr of ga[0]=0X402000

addr of ga[1]=0X402001

14

addr of array param=0x22ff20

addr of ca[0]=0x402000

addr of ca[1]=0x402001

++ca=0X402001

addr of array param=0x22ff20

addr of ca[0]=0x402000

addr of ca[1]=0x402001

++ca=0X402001

1

请按任意键继续. . .

 

在加上 char cd[]="44523";

程序头变为

#include<stdio.h>

#include<stdlib.h>

char cd[]="44523";

char ga[]="abcdefghijklm";

结果

addr of global array=0X402000

addr of global array=0X402006

addr of ga[0]=0X402006

addr of ga[1]=0X402007

14

addr of array param=0x22ff20

addr of ca[0]=0x402006

addr of ca[1]=0x402007

++ca=0X402007

addr of array param=0x22ff20

addr of ca[0]=0x402006

addr of ca[1]=0x402007

++ca=0X402007

1

请按任意键继续. . .

 

更改

char cd[]="44523";

char ga[]="abcdefghijklm";

两句的位置后

结果如下

addr of global array=0X40200E

addr of global array=0X402000

addr of ga[0]=0X402000

addr of ga[1]=0X402001

14

addr of array param=0x22ff20

addr of ca[0]=0x402000

addr of ca[1]=0x402001

++ca=0X402001

addr of array param=0x22ff20

addr of ca[0]=0x402000

addr of ca[1]=0x402001

++ca=0X402001

1

请按任意键继续. . .

 

基于以上可以得出

//应该说程序为变量分配内存会因数据类型不同而分在相应的区块里

//所以如果第一句为char cd;的话,不会影响到ga的值,因为ga是数组里的

//第一个量,它分配在了第一个位置上,仅此而已 (这是徐悦竹老师讲的)

同时可以看到一个char型变量是占一个内存单元cd数组有5个元素,首元素为

0X402000,则第五个为0X402005,然后紧接着ga的首元素为0X402006

那么int

程序头变为

#include<stdio.h>

#include<stdlib.h>

 int cd[]={4,4,5,2,3};

 char ga[]="abcdefghijklm";

 结果为

 addr of global array=0X402000

addr of global array=0X402014

addr of ga[0]=0X402014

addr of ga[1]=0X402015

14

addr of array param=0x22ff20

addr of ca[0]=0x402014

addr of ca[1]=0x402015

++ca=0X402015

addr of array param=0x22ff20

addr of ca[0]=0x402014

addr of ca[1]=0x402015

++ca=0X402015

1

请按任意键继续. . .

 

这是个比较不一样的地方,int型是比char型大一倍,但是13不是5的倍数(cd5int元素)

猜测:int后应该会有个收尾的工作,占了3个字节

我再次把 

int cd[]={4,4,5,2,3};

 char ga[]="abcdefghijklm";

 两句调换位置

 此时程序头为

 #include<stdio.h>

#include<stdlib.h>

char ga[]="abcdefghijklm";

int cd[]={4,4,5,2,3};

结果为

 addr of global array=0X402010

addr of global array=0X402000

addr of ga[0]=0X402000

addr of ga[1]=0X402001

14

addr of array param=0x22ff20

addr of ca[0]=0x402000

addr of ca[1]=0x402001

++ca=0X402001

addr of array param=0x22ff20

addr of ca[0]=0x402000

addr of ca[1]=0x402001

++ca=0X402001

1

请按任意键继续. . .

可以看到在cdchar型数组变量的时候,系统在为ga分配完内存后直接给cd分配内存

addr of global array=0X40200E

addr of global array=0X402000   说明在ga13个元素后直接给cd分配内存了

(cd=ga尾元素+1)

而在cdint型数组

抱歉!评论已关闭.