C++学习笔记六之函数如何使用指针来处理数组?

时间:2022-12-26 13:14:22

【代码示例】

#include <iostream>
#include <stdlib.h>
const int ArSize = 8;
int sum_arr(int arr[],int n);

int main()
{
using namespace std;
int cook [ArSize]= {1,2,3,4,5,6,7,8};
int sum = sum_arr(cook, ArSize);
cout << "Total cook eaten: "<<sum<<"\n";
cout << cook<<endl;//代表数组第一个元素的地址
int a[] = {1,2,3,4,5,6,7,8};
int *b=&a[0];
cout << "数组: ";
for (int i=0;i<8;i++)
{
cout <<a[i]<<"\t";
}
cout << endl;
cout << "指针: ";
for (int i = 0; i<8; i++)
{
cout <<*(b+i)<<"\t";
}
cout << endl;
cout << "数组地址: ";
for (int i = 0; i<8; i++)
{
cout <<&a[i] << " ";
}
cout << endl;
cout << "指针地址: ";
for (int i = 0; i<8; i++)
{
cout << (b + i) << " ";
}
cout << endl;
cout << "sizeof(a): " << sizeof(a) << "sizeof(b): " << sizeof(b) << endl;


system("pause");
return 0;
}
int sum_arr(int arr[], int n)
{
int total = 0;
for (int i = 0; i < n; i++)
{
total = total + arr[i];
}
return total;

}
【代码解析】

1、

int a[] = {1,2,3,4,5,6,7,8};
int *b=&a[0];
这里定义了一个数组和指针,然后把数组的第一个元素的地址传递给了b。

2、

cout << "数组: ";
for (int i=0;i<8;i++)
{
cout <<a[i]<<"\t";
}
cout << endl;
cout << "指针: ";
for (int i = 0; i<8; i++)
{
cout <<*(b+i)<<"\t";
}
cout << endl;
这一部分是用 指针加法数组下标来遍历数组,效果是一样的,每个元素的地址也是一样的。

3、

cout << "sizeof(a): " << sizeof(a) << "sizeof(b): " << sizeof(b) << endl;
这是一个有趣的部分,a和b指向的是同一个地址,也就是元素的 首地址,但输出的结果却不相同。sizeof(a)=32,而sizeof(b)=4。这是因为 sizeof(a)得到的是整个数组的长度,而sizeof(b)得到是一个指针变量的长度
【演示结果】

C++学习笔记六之函数如何使用指针来处理数组?

C++学习笔记六之函数如何使用指针来处理数组?