数组作为形参时的一个陷阱
生活随笔
收集整理的這篇文章主要介紹了
数组作为形参时的一个陷阱
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.#include <iostream>
using namespace std;
//交換兩個值
void swap(int &a, int &b) {int temp = 0;temp = a;a = b;b = temp;
}
//把數組中元素為奇數的放左邊,偶數放有右邊。
//此處引發了我對C++ primer中關于對數組作為形參時,函數的定義為什么要用一個int值作為下標變量,如果時候別的方法計算數組長度會如何,我想到了sizeof
void arr(int a[],int n) {int begin = 0;int end = n - 1;
//end=sizeof(a)/sizeof(a[0])-1;? 錯誤:sizeof(a)/sizeof(a[0])的結果為1while (begin<end){while(a[begin] % 2 == 1 && begin < end)begin++;while(a[end] % 2 == 0 && begin < end)end--;swap(a[begin], a[end]);} } int main() {int ar[8] = { 1,2,3,4,5,6,7,8 };arr(ar,8);for (int i = 0; i != 8; i++) {cout << ar[i] << " ";}return 0; }
//此處引發了我對C++ primer中關于對數組作為形參時,函數的定義為什么要用一個int值作為下標變量,如果時候別的方法計算數組長度會如何,我想到了sizeof
void arr(int a[],int n) {int begin = 0;int end = n - 1;
//end=sizeof(a)/sizeof(a[0])-1;? 錯誤:sizeof(a)/sizeof(a[0])的結果為1while (begin<end){while(a[begin] % 2 == 1 && begin < end)begin++;while(a[end] % 2 == 0 && begin < end)end--;swap(a[begin], a[end]);} } int main() {int ar[8] = { 1,2,3,4,5,6,7,8 };arr(ar,8);for (int i = 0; i != 8; i++) {cout << ar[i] << " ";}return 0; }
此例中,我曾試著在數組當形參的函數中使用sizeof來計算實參數組的大小。但是當數組作為形參的時候,其退化為一個指針,如果sizeof其數組名將計算的是一個指針的大小!
?
轉載于:https://www.cnblogs.com/Royzzzzz/p/10574170.html
總結
以上是生活随笔為你收集整理的数组作为形参时的一个陷阱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mssql sqlserver 对不同群
- 下一篇: 洛谷P2698 [USACO12MAR]