想弄懂C语言中数组和指针的关系吗?这篇文章就占据你三分钟时间,看完你肯定会有收获!
数组
数组声明为 数据类型 名称[ constant-size ],并将一个数据类型的一个或多个实例分组到一个可寻址的位置
2024年07月23日
想弄懂C语言中数组和指针的关系吗?这篇文章就占据你三分钟时间,看完你肯定会有收获!
数组声明为 数据类型 名称[ constant-size ],并将一个数据类型的一个或多个实例分组到一个可寻址的位置
2024年07月23日
函数、指针、数组结合到一起就是函数指针数组。
首先它是一个数组,这个数组的元素是函数指针(指向函数的指针)。
如:
int(*fn[])(int,int);
一般的函数指针是这样定义的:
int(*fn)(int,int);
一般的指针函数是这样定义的:
2024年07月23日
指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。今天我们就来聊一聊数组和指针千丝万缕的关系;
指针可以用来访问数组,也可以用来改变数组成员,这点与数组本身的下标运算符功能并无区别,请看下面程序演示:
2024年07月23日
#include "../utils/common.hpp"
#include <iterator>
#include <utility>
#include <vector>
class MaxHeap {
private:
vector<int> maxHeap;
int left(int i) {
return 2*i+1;
}
int right(int i) {
return 2*i+2;
}
int parent(int i) {
return (i-1)/2;
}
void siftUp(int i) {
while (true) {
int p = parent(i);
if(p<0 || maxHeap[i] <=maxHeap[p]) {
break;
}
swap(maxHeap[i],maxHeap[p]);
i = p;
}
}
void siftDown(int i) {
while (true) {
int l = left(i),r = right(i),ma = i;
if(l < size() && maxHeap[l] > maxHeap[ma]) {
ma = l;
}
if(r < size() && maxHeap[r] > maxHeap[ma]) {
ma = r;
}
if(ma == i) {
break;
}
swap(maxHeap[i],maxHeap[ma]);
i = ma;
}
}
public:
MaxHeap(vector<int> nums) {
maxHeap = nums;
for (int i = parent(size() -1); i >= 0; i --) {
siftDown(i);
}
}
int size() {
return maxHeap.size();
}
bool isEmpty() {
return size() == 0;
}
int peek() {
return maxHeap[0];
}
void push(int val) {
maxHeap.push_back(val);
siftUp(size()-1);
}
void pop() {
if(isEmpty()) {
throw out_of_range("堆为空");
}
swap(maxHeap[0],maxHeap[size()-1]);
maxHeap.pop_back();
siftDown(0);
}
void printHeap() {
cout << "堆的数组表示:";
printVector(maxHeap);
cout << "堆的树状表示:" << endl;
TreeNode *root = vectorToTree(maxHeap);
printTree(root);
freeMemoryTree(root);
}
};
int main() {
vector<int> vec = {9,8,6,6,7,5,2,1,4,3,6,2};
MaxHeap maxHeap(vec);
cout << "\n输入列表并建堆后" << endl;
maxHeap.printHeap();
int peek = maxHeap.peek();
cout << "\n堆顶元素为 " << peek << endl;
/* 元素入堆 */
int val = 7;
maxHeap.push(val);
cout << "\n元素 " << val << " 入堆后" << endl;
maxHeap.printHeap();
/* 堆顶元素出堆 */
peek = maxHeap.peek();
maxHeap.pop();
cout << "\n堆顶元素 " << peek << " 出堆后" << endl;
maxHeap.printHeap();
/* 获取堆大小 */
int size = maxHeap.size();
cout << "\n堆元素数量为 " << size << endl;
/* 判断堆是否为空 */
bool isEmpty = maxHeap.isEmpty();
cout << "\n堆是否为空 " << isEmpty << endl;
return 0;
}
2024年07月23日
下面声明一个5个元素的数组并同时初始化:
int a[5]={1,2,3,4,5};//有初始化时,数组第一维的长度可以省略,编译器可以由初始化的元素个数推出第一维的长度
数组中的数组名在代码的上下文中C++编译器有两种不同的解释:
2024年07月23日
C/C++中的数组名是个很奇怪的东西,它到底代表什么呢?
对于char array[n](n是一个常数),大概有这么几种语义:
<1> char* const(注意不是const char*) <2> char [n]
2024年07月23日
接着跟大家更新c++入门教程:c++中的动态数组
C++的new操作符是该语言一个非常好的语法特性,然而实际使用中却发现new操作符有不少限制,为突出的一点便是用new操作符分配多维数组空间时,不能让数组的每一维都动态可变。本文将对此提出一个简单直观的解决方案,在一个实际问题的简化模型中加以说明,并以此释清许多初学者对C++中new操作符与多维数组的误区。
2024年07月23日
本文演示了一些内置函数,这些函数可用于查询和操作数组类型,甚至多维数组。 这些功能在我们需要信息或操纵以不同维度发起的数组的情况下很有用。这些函数在头文件中定义。其中一些功能包括:
1.is_array():顾名思义,此函数的唯一目的是检查变量是否为数组类型。 这里值得注意的是,根据此函数,即使std :: array也不会被视为数组。如果类型为数组,则“值”成员常量将返回true,否则返回false。
2024年07月23日
9.C++数组
9.1 变量与数组
前面所学的C++变量只能用来存放一个数据值,而我们遇到的问题往往涉及多个数据量,比如学生的期末考试成绩包含了多个科目,全班同学的花名册,手机最近的通话记录可能有十多条...。如果只能用变量来存储数据,那就需要给每一个数据声明一个变量,如果数据量很大这个工作会变得既无聊又繁多。