一个用指针数组排序的程序如下:
#include <stdio.h>
#include <string.h>
void main()
{
char *bname[]={“Programming in ANSI C “,”BASIC “,”Visual C++6.0 Programming”,”Turbo C 2.0 “};
int i,m;
void sort(char *name[],int);
m=sizeof(bname)/sizeof(char *);
sort(bname,m);
printf(“\n”);
for(i=0;i<m;i++)
printf(“%8s”,bname[i]);
}
void sort(char *name[],int n)
{
char *t;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(strcmp(name[k],name[j])>0) k=j;
}
if(k!=i)
{
t=name[i];
name[i]=name[k];
name[k]=t;
}
}
}
程序中有这样两句话,请高手帮忙分析一下,看看为什么是这样的?
m=sizeof(bname)/sizeof(char *);
在程序运行时发现sizeof(bname)的值是16,sizeof(char *)的值是4,我不知道这是怎么得来的,哪位高手能给解释一下?谢谢了!!
>> 本文固定链接: http://www.vcgood.com/archives/1950
>> 转载请注明: songfeng163 2007年11月23日 于 C语言帝国 发表
终于知道了,今天问了一下同事,同事说所有的指针所占的内存空间都是4B,这是系统默认的,但不知道什么地方有这样的定义,请知道的朋友给指点一下。
目前的主流机器都是32位CPU
CPU通过地址总线来存取内存中的数据, 地址总线宽度既为32位,因此内存地址值也是32位,即4个字节
指针本质上是地址值而已
终于明白了,谢谢,以后多交流。