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

本文详细阐述了指针与多维数组的交互,强调了指针作为低维数组引用时的特性。讨论了指针变量与常量指针的区别,以及在数组和字符串中的应用。特别提醒,指针不应指向局部变量,以免造成悬挂指针。同时,介绍了如何定义返回二维数组指针的函数,并通过示例展示了局部变量与静态变量在返回指针时的不同影响。
摘要由CSDN通过智能技术生成

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;                       
          } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值