指向数组的指针

10人阅读 评论(0) 收藏 举报
分类:

数组的指针

在数组中,数组名实际上是指向数组首元素的指针(即数组首元素的地址)。

图1用代码来验证了这一点:

    图1

通过图1,还可以认为p==a,所以p[j]==a[j],即p[j]表示数组a的第j+1个元素,&p[j]表示数组a第j+1个元素的地址。



数组指针可以用图2来表示:


int a[5] = { 3,7,6,4,3 };
int* p1 = &a[0];   //数组a的首地址
int* p2 = a;       //p2==p1
int* p3 = a + 3;   //a[3]的地址
int* p4 = a + 5;   //数组a尾后位置的地址
注意:指针可以指向数组元素之前或之后的位置,但不能对其进行读写操作。


因为同一数组中元素之间的内存地址是相邻的,所以很容易就知道,
&a[j]=&a[j-1]+1  ;  &a[j]=&a[0]+j
利用解引用运算可以得到:

a[j]==*(&a[0]+j)==*(a+j)==*(j+a)==j[a]



二维数组的指

二维数组可以看做数组的数组,以2行4列的数组a为例:

int a[2][4] = { 2, 3, 8, 9, 4, 6, 7, 1 };

在逻辑上,a的形式为:

因此数组a可以看做由{2,3,8,9}和{4,6,7,1}作为两个元素所组成的数组


关于a的指针,

a[0]表示二维数组a第一行的首地址

a[1]表示二维数组a第二行的首地址

因为a可以用来表示数组a的首地址,所以a==a[0]==&a[0][0]

可以通过图2的代码和图3的相应结果来验证:

 图2                             图3



指向字符串的指针

字符串的实质就是字符的集合(即字符数组)。

所以定义字符串的方法一般为,char name[6]="Alice";

需要注意字符串必须以'\0'作为结尾,所以字符串“Alice”实际上是6个字符的集合,即'A'、'l'、'i'、'c'、'e'、'\0'  。


对于“Alice”,其指向首地址的指针就是数组名name。


但需要注意的是,如果需要打印字符串“Alice”,只需要编写语句printf(“%s”,name),因为%s要求输入的是指针。

或者cout<<name<<endl; ,其结果也是打印出字符串“Alice”。


而printf(“%c”,name)就会出现错误,因为%c要求输入的是指针指向的字符

查看评论

数组的指针和指向数组的指针变量

  • 2010年03月20日 18:15
  • 65KB
  • 下载

<C/C++>指向指针的指针、指向数组的指针以及存放指针的数组

关于指针zhe'kuai
  • fzh1900
  • fzh1900
  • 2014-05-20 18:57:23
  • 2143

指向数组的指针与指向数组首元素的指针

我的主力博客:半亩方塘 以下原创内容,转载请注明地址,欢迎对以下内容提供不同参考意见: 指向数组的指针与指向数组首元素的指针究竟有什么区别呢?有人说,这二者不是一回事么?它们就是同一个东西啊!然而...
  • gcvdsvb
  • gcvdsvb
  • 2014-05-12 16:22:37
  • 4554

指向数组的指针&数组名和指针的区别

int main() { int (*ptr)[]; int arr[] = {1,2,3,4,5}; ptr = &arr; return 0; }以上代码会报错,...
  • taoqick
  • taoqick
  • 2014-10-10 11:26:21
  • 2245

C++ 指针数组 和 指向数组的指针

二维数组作为函数参数时,函数名被视为地址,此时形参是一个指针。  例如: int data [3][4]={ {1,2,3,4},{2,3,4,5}, {3,4,5,6},{4,5,6,6}}; in...
  • u011269869
  • u011269869
  • 2017-03-07 10:25:03
  • 165

指针数组、指向指针的指针变量、指向一维数组的指针变量 区别联系

8.3 指针数组与指向指针的指针变量    8.3.1 指针数组     如果数组元素都是相同类型的指针,则称这个数组为指针数组。所谓相同类型的指针是说指针所指向的对象类型是相同的。    例如,语句...
  • wangjiwei2010
  • wangjiwei2010
  • 2007-04-03 10:41:00
  • 3483

关于数组指针和指向数组指针的指针及其new

今天在CSDN上看到了wp123456xt对我很久以前的一篇文章——方正面试的题-找出字符串最多的分解方法http://blog.csdn.net/shizhixin/article/details/...
  • ShiZhixin
  • ShiZhixin
  • 2011-12-07 17:28:44
  • 11319

数组的指针、指针数组以及指向指针的指针

考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类。一维数组在c和c++中数组的指针就是数组的起始地址(也就第...
  • kyo34080800
  • kyo34080800
  • 2011-03-17 08:30:00
  • 3290

指向数组元素的指针

针和数组有着密切的关系,任何能由数组下标完成的操作也都可用指针来实现,但程序中使用指针可使代码更紧凑、更灵活。一、指向数组元素的指针我们定义一个整型数组和一个指向整型的指针变量:int a[10], ...
  • tedious
  • tedious
  • 2010-01-11 22:30:00
  • 5064

C语言数组名及指向数组指针的小结

C语言数组名及指向数组指针的小结2012-03-13  happy123g...   阅 2133  转 13转藏到我的图书馆微信分享:C语言的数组名和对数组名取地址转自: http://blog.c...
  • qq_24373811
  • qq_24373811
  • 2016-09-05 09:06:11
  • 468
    个人资料
    等级:
    访问量: 36
    积分: 144
    排名: 113万+
    文章存档