【代码示例】
#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};这里定义了一个数组和指针,然后把数组的第一个元素的地址传递给了b。
int *b=&a[0];
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)得到是一个指针变量的长度。
【演示结果】