废话不多说,先上原始代码:、、、
#include <iostream>
using namespace std;
const int MAX = 4;
int main ()
{
const char *names[MAX] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};
for (int i = 0; i < MAX; i++)
{
cout << "Value of names[" << i << "] = ";
cout << names[i] << endl;
}
return 0;
}
Value of names[0] = Zara Ali
Value of names[1] = Hina Ali
Value of names[2] = Nuha Ali
Value of names[3] = Sara Ali
此处的name[ i ]是各个字符串的地址。给到cout里,直接输出里面的数据。
修改一下代码----version_1:
#include <iostream>
using namespace std;
const int MAX = 4;
int main ()
{
const char *names[MAX] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};
for (int i = 0; i < MAX; i++)
{
cout << "Value of names[" << i << "] = ";
cout << *names[i] << endl;
}
return 0;
}
运行结果:
Value of names[0] = Z
Value of names[1] = H
Value of names[2] = N
Value of names[3] = S
此处的*name[ i ]是name[ i ]地址中的值了。因为这个地址是字符串的首地址,给到cout里,就输出字符串的第一个字符了。
修改一下代码----version_2:
#include <iostream>
using namespace std;
const int MAX = 4;
int main ()
{
const char *names[MAX] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};
for (int i = 0; i < MAX; i++)
{
cout << "Value of names[" << i << "] = ";
cout << names[i]+1 << endl;
}
return 0;
}
运行结果:
Value of names[0] = ara Ali
Value of names[1] = ina Ali
Value of names[2] = uha Ali
Value of names[3] = ara Ali
此处的name[ i ]+1是按name[ i ]的数据类型,在地址上移动其单位尺寸的距离。移动到了字符串的第二个字符位置。给到cout里,直接输出里面的数据,以此时的位置作为首地址,输出到字符串结束。
修改一下代码----version_3:
#include <iostream>
using namespace std;
const int MAX = 4;
int main ()
{
const char *names[MAX] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};
for (int i = 0; i < MAX; i++)
{
cout << "Value of names[" << i << "] = ";
cout << *(names[i]+1) << endl;
}
return 0;
}
运行结果:
Value of names[0] = a
Value of names[1] = i
Value of names[2] = u
Value of names[3] = a
此处同理,因为移动到第二个字符的位置了,而使用的表达式又是数据(而非地址),就输出各字符串的第二位字符了。
翻了一下C++的教程:
给cout发个地址,就能自动把地址里面的字符串数据输出出来、、、
有图为证