一个关于指针数组的例子

来源:互联网 发布:网络作家富豪榜 2016 编辑:程序博客网 时间:2024/05/01 10:40

废话不多说,先上原始代码:、、、


#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 AliValue of names[1] = Hina AliValue of names[2] = Nuha AliValue 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] = ZValue of names[1] = HValue of names[2] = NValue 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 AliValue of names[1] = ina AliValue of names[2] = uha AliValue 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] = aValue of names[1] = iValue of names[2] = uValue of names[3] = a

此处同理,因为移动到第二个字符的位置了,而使用的表达式又是数据(而非地址),就输出各字符串的第二位字符了。



翻了一下C++的教程:

给cout发个地址,就能自动把地址里面的字符串数据输出出来、、、

有图为证





0 0
原创粉丝点击