首页 > 用户发贴区 > 编程问题提问区 > 关于指针数组的内存空间问题
2007
11-23

关于指针数组的内存空间问题

一个用指针数组排序的程序如下:


#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,我不知道这是怎么得来的,哪位高手能给解释一下?谢谢了!!


关于指针数组的内存空间问题》有 3 条评论

  1. songfeng163 说:

    终于知道了,今天问了一下同事,同事说所有的指针所占的内存空间都是4B,这是系统默认的,但不知道什么地方有这样的定义,请知道的朋友给指点一下。

  2. energy1013 说:

    目前的主流机器都是32位CPU

    CPU通过地址总线来存取内存中的数据, 地址总线宽度既为32位,因此内存地址值也是32位,即4个字节

    指针本质上是地址值而已

     

     

  3. songfeng163 说:

    终于明白了,谢谢,以后多交流。

留下一个回复