指针和数组之间的替换 :
一维数组和指针:
- 数组名是数组的首地址
- 数组名是一个常指针 不可修改
- 可以对指针操作来访问元素
访问数组的方式:
1.直接访问数组
a[5];
2.使用指针
*p 等价于a[0]
*(p+1)等价于a[1]
3.修改数组的值
a[5]=10;
*(p+5)=10;
实例:
main() {
int a[ARRAY_SIZE]; // 数组
for (int i = 0; i < ARRAY_SIZE; ++i) {
a[i] = i;
}
int *p = a; // int *p; (1) p = a; (2) p = &a[0];//这两种是等价的指针指向数组首地址
cout << "print array:" << endl;
for (int i = 0; i < ARRAY_SIZE; ++i) {
cout << *(p + i) << " ";
}
}
指针数组和数组指针:
1.指针数组: int *p[10] (等价于 int *(p[10])), 因为[ ]的优先级大于 * 所以p和[ ]结合
指向:10个int 型的指针
2.数组指针: int (*p)[10] 相当于 int p[][10] ,二维数组就是数组指针
指向:p指向一个数组,该数组为10个int型的元素
3.二维数组拆解:
a[i][j] = *(a[i]+j) = *(*(a+i)+j) = (*(a+i))[j]
指针数组的使用:
int a[10] = { 1,2,3,4,5,6,7,8,9 };
int* p[10];//指针数组 含有 10个 int型指针
p[0] = &a[0]; //p[0]指向a[0]的地址
p[1] = &a[1]; //p[1]指向a[1]的地址
cout << *(p[0]) << endl;//输出a[0]的值
cout << *(p[0] + 1) << endl;//输出a[2]的值
cout << *(p[1]) << endl;//输出a[2]的值
存储一个字符串列表
const char *p[4] = { "aaaa","bbbb","cccc","dddd" };
for (int i = 0; i < 4; i++)
{
cout << p[i] << endl;//输出字符串
cout<<*(p[i])<< endl;//输出单个字符
}
参考链接:
https://blog.youkuaiyun.com/qq_45303986/article/details/125173622