以下声明之间有什么区别:
int* arr1[8];
int (*arr2)[8];
int *(arr3[8]);
Run Code Online (Sandbox Code Playgroud)
理解更复杂的声明的一般规则是什么?
我最近遇到了以下情况:
int ( *array )[10] = malloc(...);
Run Code Online (Sandbox Code Playgroud)
基于我对C语法和语法的理解,这看起来像废话.看起来像正在创建(并初始化)一个数组,其中取消引用指针的值作为其标识符.
我理解指向数组的指针,并且通常至少使用malloc()在堆上分配它们.例如,这是有道理的:
int *array = malloc(sizeof (int*) * 10);
Run Code Online (Sandbox Code Playgroud)
...但是,第一个例子看起来像不应该编译的乱码.显然,我错过了一些东西.
当我学习C时,我觉得我看到了回来的东西,但谷歌搜索并没有帮助我理解.使用术语"指针","解除引用"和"初始化"进行搜索显然会给结果带来污染,这些结果会跟踪人们如何跟踪解除引用等等.我希望人类可以帮助我.
我正在简单地阅读C++,并且遇到了一段我不理解的参考和指针代码.
代码是void (* fn) (int& a, int* b) = add;.据我所知,它不会影响程序本身,但想知道这段代码的作用.
#include <iostream>
using namespace std;
void add (int& a, int* b)
{
cout << "Total: " << (a+ *b) << endl;
}
int main()
{
int num = 100, sum = 200;
int rNum = num;
int* ptr = #
void (* fn) (int& a, int* b) = add;
cout << "reference: " << rNum << endl;
cout << "pointer: " << *ptr << endl;
ptr = ∑ …Run Code Online (Sandbox Code Playgroud)