Docusaurus · Easy to Maintain Open Source Documentation Websites | 极客分享第 20 期

什么是“极客分享每周精选”

“极客分享”是一个书签分享的网站(hackershare.dev),“每周精选”是该网站汇总精选书签的一个栏目。

本期正文

原文链接: https://hackershare.dev/weekly_selections/20

1. Docusaurus · Easy to Maintain Open Source Documentation Websites

Docusaurus makes it easy to maintain Open Source documentation websites.

标签: #opensource #Docusaurus #Documentation #tool

2. 《柯林斯双解》for macOS

ESL 用户需要学习词典,这类好词典有很多,比如柯林斯、朗文等,但 macOS 都没有内置,别人转制的质量又一般,于是我打算自己动手,移植两部。

标签: #macos #tools #english #词典

3. Unsplash Image API | Free HD Photo API

Create with the largest collection of high-quality images that are free to use. Trusted by Trello, Medium, and thousands of other API applications to power their free picture needs.

标签: #API #Unsplash

4. 腾讯柠檬精选——收录免费、正版、好用的Mac应用及产品

Lemon不错,免费的cleanmymac

标签: #mac #free #tool

5. Meltano: open source ELT

Open source, self-hosted, CLI-first, debuggable, and extensible. Embraces Singer and its library of connectors, and leverages dbt for transformation.

标签: #ETL #analytics #opensource

订阅我们

要订阅“每周精选”,只要注册成网站用户即可(支持 GitHub/Twitter 一键注册),我们会每周向注册用户发送邮件,或者你也可以关注我们的公众号。

### C++ 中的一维数组用法及其示例 #### 动态分配一维数组 在 C++ 中,可以通过 `new` 运算符动态创建一维数组。这种方式允许程序运行时决定数组大小并为其分配内存空间。需要注意的是,当不再需要该数组时,应通过 `delete[]` 显式释放其占用的资源。 以下是动态分配一维数组一个简单例子: ```cpp int size; std::cout << "Enter the size of the array: "; std::cin >> size; // 使用 new 创建一个整数类型的动态数组 int* arr = new int[size]; for (int i = 0; i < size; ++i) { std::cout << "Enter element at index " << i << ": "; std::cin >> arr[i]; } std::cout << "\nThe elements you entered are:\n"; for (int i = 0; i < size; ++i) { std::cout << arr[i] << &#39; &#39;; } std::cout << &#39;\n&#39;; // 删除动态分配的数组以防止内存泄漏 delete[] arr; ``` 此代码片段展示了如何请求用户输入数组大小以及各个元素值,并最终打印这些值[^1]。 #### 静态声明一维数组 除了动态分配外,在编译期即可确定大小的情况下可以采用静态方式定义数组: ```cpp const int SIZE = 5; double scores[SIZE]; scores[0] = 89.5; scores[1] = 76.3; ... ``` 这里我们预先设定了常量 `SIZE` 来表示固定长度为五的成绩列表。随后初始化部分成员变量作为示范。 #### 访问越界的风险 无论采取哪种方法构建一维数组,都需注意避免超出有效索引范围的操作。例如尝试读取或者写入不存在的位置可能会引发未定义行为甚至崩溃应用程序。因此建议始终验证下标合法性后再执行相应操作。 #### 示例中的指针运算解释 回到最初给出的例子中关于地址输出的部分, ```cpp char *str; str = new char[5]{"abcd"}; int *p = new int{5}; int *q = new int[3]{1,2,3}; std::cout << p << std::endl; // 输出指向第一个整型数据的起始位置 std::cout << p + 1 << std::endl; // 移动到下一个连续存储单元处(假设每项占四个字节则加四) std::cout << q << std::endl; // 同样显示首址信息 std::cout << q + 1 << std::endl; // 跳转至第二个元素所在区域 ``` 可以看到每次增加偏移量都会改变当前所指代的具体对象实例而不会影响原始基址本身[^1]。 最后提醒一下记得清理掉临时使用的堆区资源以免造成浪费!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值