请问C++中,用数组作为函数形参和用指针作为函数形参,有什么不同?
请问C++中,用数组作为函数形参和用指针作为函数形参,有什么不同?望高手详细指点,真诚求指教!谢谢!...
请问C++中,用数组作为函数形参和用指针作为函数形参,有什么不同?望高手详细指点,真诚求指教!谢谢!
展开
1个回答
展开全部
还是有差别的 虽然大多数时候都可以相互用
最大的差别就是指针可以改变,可以通过指针改变指向内容的值,但数组名不行
举个例子:(分别作为形参)
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等类型是不一样的,传递数组传递的是原数组,函数的操作就改变了原来的数组,而传递一般的数只是传递它的拷贝,对原来的数没有影响;
还有什么不懂的继续交流~~~
最大的差别就是指针可以改变,可以通过指针改变指向内容的值,但数组名不行
举个例子:(分别作为形参)
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等类型是不一样的,传递数组传递的是原数组,函数的操作就改变了原来的数组,而传递一般的数只是传递它的拷贝,对原来的数没有影响;
还有什么不懂的继续交流~~~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |