利用指针打印数组
#include<iostream>
#include<typeinfo>
#include<vector>
#include<algorithm>
using namespace std;int main()
{int arr[] = { 1,2,3,4,5,6,7 };int* p = arr;//指針p是指向數組的首元素地址cout << *(p + 4) << endl;//指針是指向數組第5個元素的地址for (int i = 0; i < 7; i++){cout << *p << endl;p++;//地址增加4個字節,指向數組的下一個元素}return 0;
}
注意:
1、指針“++”詳解
int main()
{
?? ?int arr[] = { 1,2,3,4,5,6,7 };
?? ?int* p = arr;//指針p是指向數組的首元素地址?? ?cout << *p++ << endl;//指針是指向數組首元素地址,因為先*p再++
?? ?cout << *p << endl;//因為上面地址+1,所以指針是指向數組第二個元素的地址
?? ?return 0;
}2、指針之間可以相減(相減的結果是位置相減的結果)
int main()
{
?? ?int arr[] = { 9,2,5,8 };
?? ?int* p = arr+3;
?? ?cout << p-arr << endl;//結果為3
?? ?system("pause");
?? ?return 0;
}
示例:兩個有序數組的合并
在確定一個數組大小的時候我們一般用sizeof
1
2
3
int?arr1[] = {1 , 2, 4 ,5};
int?arr1_len =?sizeof?arr1/sizeof(int);
std::cout<<?"arr1 len: "?<< arr1_len << std::endl;但是如果數組是函數的一個參數,我們就要把數組的大小也做為參數傳入,換個方式說就是,如果數組做為參數,在函數內我們就不能使用sizeof來計算數組的大小?例:
1
int?sum(int?arr[],?int?len)參數int arr[] 中括號為空表明可以傳入任意長度的數組給函數。但是參數arr[]并不是數組,而是一個指針,但我們可以當作數組來使用。
一般情況下,數組名就是指針,c++將數組名解析為第一個元素的地址:
1
arr == &arr[0]
#include<iostream>
#include<typeinfo>
#include<vector>
#include<algorithm>
using namespace std;int* merge_array(int arr1[],int len1, int arr2[], int len2)
{//數組做為參數,在函數內我們就不能使用sizeof來計算數組的大小/*int len1 = sizeof(arr1) / sizeof(arr1[0]);int len2 = sizeof(arr2) / sizeof(arr2[0]);*/int* p1 = arr1;//指針p1是指向數組的首元素地址int* p2 = arr2;//指針p2是指向數組的首元素地址int len = len1 + len2;int *arr = new int[len];//合并后的新表int* p = arr;int *p1_last = (p1 + len1 - 1);//p1_last是指向數組的最后一個元素地址int *p2_last = (p2 + len2 - 1);//p2_last是指向數組的最后一個元素地址while (p1 <= p1_last && p2 <= p2_last){if (*p1 < *p2){*p++ = *p1++;}else{*p++ = *p2++;}}while (p1 <= p1_last){*p++ = *p1++;}while (p2 <= p2_last){*p++ = *p2++;}return arr;
}int main()
{int arr1[3] = { 1,7,8 };int arr2[6] = { 2,4,6,8,10,11 };int len1 = sizeof(arr1) / sizeof(arr1[0]);int len2 = sizeof(arr2) / sizeof(arr2[0]);int *arr=merge_array(arr1,len1, arr2,len2);int len = len1 + len2;for (int i = 0; i < len; i++){cout << *arr << endl;arr++;}return 0;
}
總結
- 上一篇: c++中求字符串数组的min/max
- 下一篇: 自定义类型数组的初始化