#include <iostream>
using std::cout;
using std::endl;
int main()
{
int a[5] = {0, 1, 2, 3, 4};
int *p = a;
for(int i = 0; i < 5; i++)
{
// 这句话与下面的两句话效果一样
// cout << *p++ << '\t';
cout << *p << '\t';
p++;
}
cout << endl;
p = a;
for(int i = 0; i < 5; i++)
cout << *(p + i) << '\t';
cout << endl;
for(int i = 0; i < 5; i++)
cout << *(a + i) << '\t';
cout << endl;
for(int i = 0; i < 5; i++)
cout << p[i] << '\t';
cout << endl;
cout << endl;
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
int *pArr = &arr[0][0];
for(int i = 0; i < 9; i++)
cout << *pArr++ << " ";
cout << endl;
// 输出每行的首地址及所有的元素值
// 由于数组在内存的地址是由操作系统动态分配,
// 因此,实际输出的各行首地址并不会从假设的1000到1035。
// 各行的首地址可能会相差很大
for(int i = 0; i < 3; i++)
{
cout << "arr[" << i << "]=" << arr[i] << "=" << &arr[i][0] << endl; // 第i行的行首地址
cout << "arr[" << i << "]=" << arr + i << endl; // 第i行的行首地址
cout << *(arr[i]) << endl; // 第i行第一个元素的值
cout << *(arr + i) << endl; // 第i行的行首地址
for(int j = 0; j < 3; j++)
cout << "arr[" << i << "][" << j << "]=" << *(arr[i] + j) << "=" << arr[i][j] << endl;
}
// C++中引入了行地址的概念,并规定二维数组a中的第i行地址用a+i或&a[i]表示,行地址的值与行
// 首地址的值是相同的,即:a+i = &a[i] = a[i] = &a[i][0],但两者类型不同,所以行地址只能用于
// 指向以为数组的指针变量,而不能用于普通指针变量,例如:
// int a[3][3];
// int *p = a + 0; // 编译错误,提示用户p与a+0的类型不同,
// 如果要将行地址赋给普通指针变量,必须用强制类型转换,int *p = (int*)(a+0);
// 二维数组名a可用于表示二维数组的首地址,但C++规定该首地址并不是二维数组中第0行第0列的地址
// 即(a != a[0][0]),而是第0行的地址:a = a + 0 = &a[0];
// 二维数组第i行首地址有三种表示方法:a[i], *(a+i), &a[i][0];
// 第i行第j列元素a[i][j]的地址有四种表示方法
// a[i] + j, *(a+i)+j, &a[i][0]+j, &a[i][j]
// 第i行第j列元素a[i][j]值也有4中表示方法
// *(a[i]+j), *(*(a+i)+j), *(&a[i][0]+j), a[i][j]
// 行地址、元素地址、元素值 表示方式
// 第i行行地址 a+i、&a[i]
// 第i行首地址(第i行第0列地址) a[i]、 *(a+i)、 &a[i][0]
// 元素a[i][j]的地址 a[i]+j 、*(a+i)+j 、&a[i][0]+j、&a[i][j]
// 第i行第j列元素值 *(a[i]+j) 、 *(*(a+i)+j) 、 *(&a[i][0]+j)、a[i][j]
cout << endl;
cout << endl;
for(int i = 0; i < 3; i++)
{
// 第i行行地址,行地址是一个二级指针
cout << "&arr[" << i << "]=" << &arr[i] << " = " << arr + i << endl;
// 第i行行首地址,行首地址是普通指针
cout << "arr[" << i << "]=" << arr[i] << " = " << *(arr + i)
<< " = " << &arr[i][0] << endl;
for(int j = 0; j < 3; j++)
{
// 元素a[i][j]的地址
cout << "&arr[" << i << "][" << j << "]=" << arr[i] + j << " = "
<< *(arr + i) + j << " = " << &arr[i][0] + j << " = "
<< &arr[i][j] << endl;
// 元素a[i][j]的值
cout << "arr[" << i << "][" << j << "]=" << *(arr[i] + j) << " = "
<< *(*(arr + i) + j) << " = " << *(&arr[i][0] + j) << " = "
<< arr[i][j] << endl;
}
}
system("pause");
return 0;
}
Point_2
最新推荐文章于 2023-05-09 15:45:55 发布