利用指针打印数组
#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是指向數(shù)組的首元素地址cout << *(p + 4) << endl;//指針是指向數(shù)組第5個(gè)元素的地址for (int i = 0; i < 7; i++){cout << *p << endl;p++;//地址增加4個(gè)字節(jié),指向數(shù)組的下一個(gè)元素}return 0;
}
注意:
1、指針“++”詳解
int main()
{
?? ?int arr[] = { 1,2,3,4,5,6,7 };
?? ?int* p = arr;//指針p是指向數(shù)組的首元素地址?? ?cout << *p++ << endl;//指針是指向數(shù)組首元素地址,因?yàn)橄?p再++
?? ?cout << *p << endl;//因?yàn)樯厦娴刂?#43;1,所以指針是指向數(shù)組第二個(gè)元素的地址
?? ?return 0;
}2、指針之間可以相減(相減的結(jié)果是位置相減的結(jié)果)
int main()
{
?? ?int arr[] = { 9,2,5,8 };
?? ?int* p = arr+3;
?? ?cout << p-arr << endl;//結(jié)果為3
?? ?system("pause");
?? ?return 0;
}
示例:兩個(gè)有序數(shù)組的合并
在確定一個(gè)數(shù)組大小的時(shí)候我們一般用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;但是如果數(shù)組是函數(shù)的一個(gè)參數(shù),我們就要把數(shù)組的大小也做為參數(shù)傳入,換個(gè)方式說(shuō)就是,如果數(shù)組做為參數(shù),在函數(shù)內(nèi)我們就不能使用sizeof來(lái)計(jì)算數(shù)組的大小?例:
1
int?sum(int?arr[],?int?len)參數(shù)int arr[] 中括號(hào)為空表明可以傳入任意長(zhǎng)度的數(shù)組給函數(shù)。但是參數(shù)arr[]并不是數(shù)組,而是一個(gè)指針,但我們可以當(dāng)作數(shù)組來(lái)使用。
一般情況下,數(shù)組名就是指針,c++將數(shù)組名解析為第一個(gè)元素的地址:
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)
{//數(shù)組做為參數(shù),在函數(shù)內(nèi)我們就不能使用sizeof來(lái)計(jì)算數(shù)組的大小/*int len1 = sizeof(arr1) / sizeof(arr1[0]);int len2 = sizeof(arr2) / sizeof(arr2[0]);*/int* p1 = arr1;//指針p1是指向數(shù)組的首元素地址int* p2 = arr2;//指針p2是指向數(shù)組的首元素地址int len = len1 + len2;int *arr = new int[len];//合并后的新表int* p = arr;int *p1_last = (p1 + len1 - 1);//p1_last是指向數(shù)組的最后一個(gè)元素地址int *p2_last = (p2 + len2 - 1);//p2_last是指向數(shù)組的最后一個(gè)元素地址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;
}
總結(jié)
- 上一篇: c++中求字符串数组的min/max
- 下一篇: 自定义类型数组的初始化