指针与数组(二)
指针和数组之间的替换 :
一维数组和指针:
- 数组名是数组的首地址
- 数组名是一个常指针 不可修改
- 可以对指针操作来访问元素
访问数组的方式:
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.csdn.net/qq_45303986/article/details/125173622