二级指针

本文通过实例详细解释了一级指针与二级指针的区别及其应用场景,包括如何使用一级指针进行值传递,以及如何利用二级指针实现地址传递,进而达到改变外部变量的目的。
二级指针,一直是自己比较模糊的存在,直到有天做梦 然后醒来就懂了 嘎嘎

啥都不说了 直接上代码的

//定义DBLog
#define DBLog(fmt, ...)   NSLog((@"\nfunction:%s \nline:%d" fmt),__PRETTY_FUNCTION__,__LINE__, ##__VA_ARGS__);
#define DLog(fmt, ...)      NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //二级指针的一般用法
    /**
     * @author 刘俊, 15-08-18
     *
     * 一级指针的传递只是值的传递,虽然在方法中将singlePointArr初始化了(但是在函数中是属于局部变量)
     *     
     *关于一级指针,二级指针的理解,主要:一级指针是对自身值的传递,二级指针是对自己地址的传递,
     *第一种情况中,singlPointArr是一个未初始化的数组,也就是该数组指向一个nil,在传进去initSingleArray中实际是穿了一个nil进去,然后就可以理解为在该函数中实际是对arr数组的初始化,而arr是一个局部变量,出了函数的作用域之后就消失,所以第一个在外面就没有值打印出来
     *第二种情况,虽然还是一个一级指针,但是因为已经初始化了,其指向一个已经开辟内存空间的数组,所以穿进函数中的就是指向这片空间的地址,而在函数中修改arr也就是相当于直接操作修改原来的数组,所以在外面打印的时候,数组是改变的
     *第三种情况是,数组没有舒适化,虽然指向的是一个nil,但是传进函数中的是自己的地址,在函数中直接操作的也就是自己的地址,相当于拿着自己本身在初始化,所以在函数外面打印的是已经初始化的值
     //所以对于必须传得二级指针,外面的变量必须为nil
     */
    NSArray *singlePointArr = nil;
    [self initSingleArray:singlePointArr];
    DBLog(@"\n1. singlePointArr = %@\n point :%p\n\n",singlePointArr,singlePointArr);
    //DLog(@"\n1. singlePointArr = %@\n point :%p",singlePointArr,singlePointArr);
   
    NSMutableArray *singlePointArr1 = @[@"1",@"2",@"3",@"4",@"5"].mutableCopy;
    [self changeSingleArray:singlePointArr1];
    DBLog(@"\n2.changeSingle: %@ \n point:%p \n\n",singlePointArr1,singlePointArr1);
    
    
    NSArray *doublePointArr = nil;
    [self initDoubleArray:&doublePointArr];
    DBLog(@"\n2.doublePointArr = %@\n point:%p \n\n",doublePointArr,doublePointArr);
    
    
    
}


//传一级指针
- (void)initSingleArray:(NSArray *)arr {
    DBLog(@"\n1.%@\n\n",arr);
    arr = @[@"one",@"two"];
    DBLog(@"\n1. arr = %@\n %p\n\n",arr,arr);

}

- (void)changeSingleArray:(NSMutableArray *)arr {
    
    [arr removeLastObject];
    
}

//传二级指针
- (void)initDoubleArray:(NSArray **)arr {
    
    *arr = @[@"1",@"2"];
    DBLog(@"\n2. arr = %@ \n point:%p\n\n",*arr,*arr);
}

@end
考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度和提升系统经济性。文中可能涉及不确定性建模(如场景生成与缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例与代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真与优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率与创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建与求解过程,重点关注不确定性处理方法与需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习与交叉验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值