C++数组与指针的区别以及数组指针/指针数组实例介绍

来源:互联网 发布:excel数据统计图表 编辑:程序博客网 时间:2024/06/07 01:37

1.数组与指针的区别
C++/C程序中,指针和数组在不少地方可以相互替换着用,但两者是有区别的:数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,可以改变的只有数组的内容
指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。

注意两者在修改内容时的不同:假设字符数组a的容量是6个字符,其内容为hello\0。a的内容可以改变,如a[0]= ‘X’。指针p指向常量字符串“world”(位于静态存储区,内容为world\0),常量字符串的内容是不可以被修改的。如果使用:p[0]='X',从语法上看,编译器并不觉得语句p[0]= ‘X’有什么不妥,但是该语句企图修改常量字符串的内容而导致运行错误。

2.指针数组和数组指针?
指针数组
:指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。

int* a[4]     指针数组                   表示:数组a中的元素都为int型指针                  元素表示:*a[i]和*(a[i])是一样的,因为[]优先级高于*

#include <iostream>using namespace std;int main(){    int v[2][3] = {{1, 2, 3}, {4, 5, 6}};    int* pv[2];    for (int i = 0; i < 2; ++i)        pv[i] = v[i];for(int i=0;i<2;i++){for(int j=0;j<3;j++){cout<<*(pv[i]+j)<<" ";}    cout<<endl;}}

数组指针:数组指针可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。

#include <iostream>using namespace std;int main(){    int v[2][3] = {{1, 2, 3}, {4, 5, 6}};    int (*a)[3] = v;          //指向第1行的指针for(int i=0;i<2;i++){for(int j=0;j<3;j++){cout<<*(a[i]+j)<<" ";}    cout<<endl;}}

参考:

http://blog.chinaunix.net/uid-23544029-id-311366.html

http://blog.csdn.net/men_wen/article/details/52694069

http://blog.csdn.net/touch_2011/article/details/6966980

http://www.cnblogs.com/kaituorensheng/p/3722570.html

http://www.cnblogs.com/Romi/archive/2012/01/10/2317898.html

0 0
原创粉丝点击