关于数组指针的一些需要注意的地方

1.在多维数组中,指向低维数组的指针并不是普通的指向指针的指针。

2.在指针的使用上一定要清除哪些是常量,哪些是变量,
还要清楚指针指向的是变量还是常量。
只有指针变量才能进行增减操作
数组标记法和指针标记法最大的区别就是前者是常量,不能成为左值。
例如一维数组中:

 int a[8];
 int* p=a;
 p++; (正确)
 a++; (错误)

二维数组中:

 int a[3][5];
 int (*p)[5];
 p=a;
 p++;(正确,因为p是一个指针变量)
 *p++; (错误,因为*p=a[0],这是一个常量,无法递增,只能使用*p+i这样的表达式来进行遍历)

在字符串中也是一样,区别在于字符串常量储存在静态区域,如果用数组标记法赋值,则在内存中另外复制了一个数组块,可以更改。而直接用指针标记法赋值,则无法更改字符串常量。

3.函数返回一个指向二维数组的指针

如果要定义返回一个指向二维int数组(低维数组大小是5个)的指针,
写法是

int *(func())[5] {……} 

4.一定要注意,不要让指针指向局部变量。因为函数一旦结束,变量地址就释放了,指针指向的内容变得不可预料。如果指向在函数中定义的常量,一定要加上static

        int *(func(void))[3] 
       {
          int a[2][3]={1,2,3,4,5,6};
            return a;                       
        } 

如果在主程序中调用打印a,会出现不可预料的结果,必须要在数组常量前加上static:

           int *(func(void))[3] 
         {
            static int a[2][3]={1,2,3,4,5,6};
            return a;                       
          } 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值