数组指针的使用要点

 1. 指针有等级。对不同等级的指针进行同样的操作,结果是不一样的,即便这两个指针的值是相等的。

     int arr【10】【15】;这里的arr就是一个指向arr【0】这个一维数组的指针,它的等级是一维数组级的。

     *arr也是一个指针,但它是指向arr【0】的第零个元素arr【0】【0】的,它的级别是整形变量级的。

     arr+1指向的是arr【1】,*arr+1指向的arr【0】【1】。级别体现出来了。

 

2.  如果p是一个指针,那么方括号运算符和星号运算符有个等价的结合点:*(p+i)和p【i】是等价的。

    所以,*arr和arr【0】是等价的,因为*arr就是*(arr+0)。

 

3.  数组元素名是指针,但是是常量,即arr是个常量,所以不能对它进行修改,arr++是错误的

 

4. 定义一个数组等级的指针的方法:类型 (*p)【数组大小】。如int (*p)【15】;就定义了一个指向

    包含15个元素的数组的指针。注意,*p的圆括号不可少,因为方括号的优先级高于圆括号,如果写成

    int *p【15】就变成定义一个指针数组了,意思是:p是一个数组,里面存放的是指针。

 

5. 指向数组的指针不一定是数组指针,比如char *p[]={"ABCD","EFGH","IJK","LMNOPQRST"},这里的p是指向数组的吧,

   但是它却不是数组指针,p+1的单位不是p数组的大小,而是char*的大小。指针数组是需要显式定义的。

 

 

呵呵,纯属个人感悟,如有不对,请不吝赐教!!

 

测试程序:

 

 

 

 

#include "stdafx.h"
#include<iostream>
using namespace std;


void arrayTest(char (*s)[5])
{
 for(int i=0;i<5;i++)
 cout<<*(*s+i)<<endl;//记住:p[i]就是*(p+i);s是指向一维数组 的指针,那么他加一就是加一个数组的长度
 //cout<<s[i]<<endl;   //所以,p+i不是a所指的数组的第p个元素,而是p后面i个p数组长度的地址!!
 //cout<<*(s+i)<<endl; //如果要找到p所指的数组的第i个元素,必须将p这个指针降级!即加个星号*变成*p,这样*p[i]就是
 //cout<<(*s)[i]<<endl;//第i个元素的值,或者*(*p+i)也是。
}

void arrayTestChar(char *s)
{
 for(int i=0;i<5;i++)
 cout<<*(s+i)<<endl;
}
void main(int argc, _TCHAR* argv[])
{
  char arrTwo[][5]={{'a','b','c'},{'d','e','f','g','h'},{'i','j','k','l'}};
 for(int i=0;i<3;i++)
 {
  //arrayTest(arrTwo+i);
  arrayTestChar (*(arrTwo+i));
  cout<<endl;
 }
}

 

运行结果:

a
b
c

 


d
e
f
g
h

i
j
k
l


/****************end ******************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值