数组作为函数形参和用指针作为函数形参

 还是有差别的

虽然大多数时候都可以相互用最大的差别就是指针可以改变,可以通过指针改变指向内容的值,但数组名不行

举个例子:(分别作为形参)

int num[10], *p;

p = num;//此时p指向数组的第一个元素

在主函数里调用两个函数

1 Sum(num);

2 Sum(p+2,10);

这就有区别了,因为num数组首地址它不能变化,但是此时p指向了数组的第三个元素,而且后面的那个10也是可以改变的,所以说用指针作为形参的时候要带一个int n 表示你要处理的数的个数,所以说用指针作为形参的话会给你一种假象,它的确是指向的数组的某个元素(这要看你的指针移动了,比如说p+2等等,数组名不能移动),但是它仅仅只是一个指针,你可以在调用的函数里用sizeof(num),sizeof(p)求它们的值,就知道为什么总是要加上一个int n了,因为如果不加的话函数就不知道你要操作的数的个数,另外别忘了传递数组和传递一般的int,double等类型是不一样的,传递数组传递的是原数组(有问题),函数的操作就改变了原来的数组,而传递一般的数只是传递它的拷贝,对原来的数没有影响

你可能感兴趣的:(C/C++)