标签:style blog http io ar os sp for on
直接上代码吧,解释说得很清楚了。
// C++Primer.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include <iostream> using namespace std; int (*function(int i))[10];//返回数组指针的函数 int main() { cout<<"数组、指针数组、数组指针、返回数组指针的函数:"<<endl<<endl; int arr[10]; //声明一个数组,数组元素是int int *p1[10];//声明一个数组,数组元素是指向int的指针 int (*p2)[10];//声明一个指向含有10个整形的数组,p2本身是个指针 for(int i = 0; i < 10; i++) arr[i] = i; for(int i = 0; i < 10; i++) cout<<arr[i]<<" "; cout<<endl<<"arr:"<<arr<<endl;//输出首地址 cout<<"&arr[0]:"<<&arr[0]<<endl;//输出首元素的地址 cout<<"*arr:"<<*arr<<endl;//输出首地址指向元素的值,也就是首元素的值 cout<<"*(arr+1):"<<*(arr+1)<<endl<<endl;//通过对指针的加法输出元素值 cout<<"对p1赋值为arr元素的地址并输出:"<<endl; for(int i = 0; i < 10; i++)//也可以是&arr[i] p1[i] = arr+i; for(int i = 0; i < 10; i++) cout<<p1[i]<<" "; cout<<"通过对p1中的元素解引用输出数组arr:"<<endl; for(int i = 0; i < 10; i++)//p1中存储的都是地址 cout<<*p1[i]<<" "; cout<<"对指向数组的指针p2赋值为arr的地址:"<<endl; p2 = &arr;//对指针赋值,p2存储的是arr的地址 cout<<"p2:"<<p2<<" "<<"*p2:"<<*p2<<endl;//为什么会相同? cout<<"p2[i]:"<<endl; for(int i = 0; i < 10; i++)//这个访问时无意义的,因为越界了。p2[i]编译器解释为*(p2+i) cout<<p2[i]<<" "; //而p2只是个地址,没有意义,它后面接的元素不是数组,跟p2没有关系 cout<<"*p2[i]:"<<endl; for(int i = 0; i < 10; i++) cout<<*p2[i]<<" ";//同上,对上述的地址解引用而已,已经越界访问,没有意义 cout<<"(*p2)[i]:"<<endl; for(int i = 0; i < 10; i++) cout<<(*p2)[i]<<" ";//等同于arr[i] return 0; }
标签:style blog http io ar os sp for on
原文地址:http://blog.csdn.net/yapian8/article/details/41548527