读书人

指针数组作为参数的有关问题

发布时间: 2012-05-27 05:42:30 作者: rapoo

指针数组作为参数的问题
指针数组的大小为3,可是传到函数之后大小却总是为1,这是为什么呢?
我确认过,传送之后arr里的数据与地址(&arr[0]等)和p是一样的,所以数据传送没有问题。
环境是VS C++ 2010。

void iniArray(int *arr[])
{
int row=sizeof(arr)/sizeof(arr[0]); ←row总是为1
。。。
}

int _tmain(int argc, _TCHAR* argv[])
{

int temp[3][2]={{1,2},{3,4},{5,6}};
int *p[3]={temp[0],temp[1],temp[2]};

int size=sizeof(p)/sizeof(p[0]); ← size为3

iniArray(p);
。。。
}

[解决办法]
作为实参的数组会退化成指针
[解决办法]
指针数组是指的数组里面存放的是指针,与一般数组的唯一区别就在是这。数组作为函数参数,传递的是指针,指向该数组的指针而已。void iniArray(int *arr[])
{
int row=sizeof(arr)/sizeof(arr[0]); ←row总是为1
。。。
}
实质是:一个指针大小除以另一个指针大小 所以总是为1。
[解决办法]
请参考下面的代码及其其中的注释。

C/C++ code
#include <iostream>using namespace std;void iniArray(int *arr[]){    cout << typeid(arr).name() << endl;    // arr已经退化成int**,即一个二级指针    int row = sizeof(arr)/sizeof(arr[0]);    cout << row << endl;}void initArray(int* arr[], int length){    cout << length << endl;}int main(void){    int a = 1;    int b = 2;    int c = 3;    int* arr[] = {&a, &b, &c};    cout << sizeof(arr) / sizeof(arr[0]) << endl;    // 会输出3    iniArray(arr);    // 会输出1,因为arr作为参数传入时,已经退化成了int**                                                                   // 因为这样的原因,所以在用数组作为函数的参数时,通常还会再多加一个参数,    initArray(arr, sizeof(arr) / sizeof(arr[0]));    // 用来说明数组的长度,就像initArray这样。    return 0;} 

读书人网 >C语言

热点推荐