C++之指针数组
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
template<class T>
int get_array_length(T &arr);
int main() {
system("chcp 65001");
int *ptr[3];
int a[] = {100, 200, 300};
int size = get_array_length(ptr);
for (int i = 0; i < size; ++i) {
cout << "指针数组元素地址未改变:" << ptr[i] << endl;
ptr[i] = &a[i];
cout << "指针数组元素地址指向数组a元素对应的地址:" << ptr[i] << endl;
cout << "指针数组元素指向数组a元素对应的新值:" << *ptr[i] << endl;
cout << "指针数组地址未改变:" << ptr << endl;
}
return 0;
}
template<class T>
int get_array_length(T &arr) {
return sizeof(arr) / sizeof(arr[0]);
}
输出:
Active code page: 65001
指针数组元素地址未改变:0x8
指针数组元素地址指向数组a元素对应的地址:0x63fdf4
指针数组元素指向数组a元素对应的新值:100
指针数组地址未改变:0x63fe00
指针数组元素地址未改变:0x31
指针数组元素地址指向数组a元素对应的地址:0x63fdf8
指针数组元素指向数组a元素对应的新值:200
指针数组地址未改变:0x63fe00
指针数组元素地址未改变:0x7516f0
指针数组元素地址指向数组a元素对应的地址:0x63fdfc
指针数组元素指向数组a元素对应的新值:300
指针数组地址未改变:0x63fe00
在这里,把 ptr 声明为一个数组,由 size 个整数指针组成。因此,ptr 中的每个元素,都是一个指向 int 值的指针。
指向字符串的指针数组
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
template<class T>
int get_array_length(T &arr);
int main() {
system("chcp 65001");
const char *fruit[] = {
"apple",
"orange",
"pear",
"watermelon",
"pumpkin",
"mulberry"
};
char p[7] = {'a', 'b', 'c', 'd', 'e', 'f'};
int size = get_array_length(fruit);
for (int i = 0; i < size; ++i) {
fruit[i] = &p[i];
cout << (int *) fruit[i] << endl;
cout << "value_name[" << i << "]" << fruit[i] << endl;
}
return 0;
}
template<class T>
int get_array_length(T &arr) {
return sizeof(arr) / sizeof(arr[0]);
}
Active code page: 65001
0x63fdd9
value_name[0]abcdef
0x63fdda
value_name[1]bcdef
0x63fddb
value_name[2]cdef
0x63fddc
value_name[3]def
0x63fddd
value_name[4]ef
0x63fdde
value_name[5]f