注册 登录
编程论坛 C++教室

不明白

tymstill 发布于 2008-04-14 09:34, 643 次点击
//arrfun2.cpp -- function with an array argument
#include<iostream>
const int ArSize=8;
int sum_arr(int arr[],int n);

//use std:: instead of using directive
int main()
{
    int cookies[ArSize]={1,2,4,8,16,32,64,128};
// some systems require preceding int with static to
// enable array initialization
   
    std::cout<<cookies<<" = array addres, ";
// some systems require a type cast: unsigned(cookies)

    std::cout<<sizeof cookies<<" = sizeof cookies\n";
    int sum=sum_arr(cookies,ArSize);
    std::cout<<"Total cookies eaten: "<<sum<<std::endl;
    sum=sum_arr(cookies,3);
    std::cout<<"First three eaters ate "<<sum<<" cookies.\n";
    sum=sum_arr(cookies+4,4);
    std::cout<<"Last four eaters ate "<<sum<<" cookies.\n";
   
    system("pause");
    return 0;
}

//return the sum of an integer array
int sum_arr(int arr[],int n)
{
    int total=0;
    std::cout<<arr<<" = arr, ";
// some systems requires a type cast: unsigned(arr)
   
    std::cout<<sizeof arr<<" = sizeof arr\n";
    for(int i=0;i<n;i++)
       total=total+arr[i];
    return total;
}

运行结果是 sizeof cookies=32, sizeof arr=4

而在C++ Primer Plus书上说,sizeof cookies的值为16,而sizeof arr为4
为什么结果不一样呢?
1 回复
#2
herolzx2008-04-14 10:26
这个跟系统(编译器)有关
C++没有强制规定存储每种内置类型的内存空间大小,对于int 可以是2byte 或者4byte
VC++ sizeof(int)=4 所以 sizeof(arr)= 4 * 8 =32;

 int sum_arr(int arr[],int n) arr 是个形参,一个只象整型(int)的指针。
1