这个问题遵循关于C声明的另一个问题.阅读这个问题的答案,我读到了螺旋规则,我也理解了"声明遵循用法"的含义.
好到目前为止.但后来我读到了这个宣言:
char *(*(*a[N])())();
Run Code Online (Sandbox Code Playgroud)
我想知道如何用"声明跟随用法""规则"来解析它.特别是对于阵列部分.
我读到的是:
(*(*a[N])())
Run Code Online (Sandbox Code Playgroud)
是一个()返回a 的函数char *,然后解除引用以下内容
(*a[N])() // 1
Run Code Online (Sandbox Code Playgroud)
这是'函数返回char*',所以1是'返回函数的指针char *'然后我会说'何时(*a[N])被调用,它是[先前的声明]'.此时我们有(*a[N])一个返回指向返回函数的指针的函数char *.
但后来我不知道如何应用这个规则来区分"指向数组的指针"和"指针数组".
有人可以澄清一下吗?
其他问题:这些声明中的"优先级"规则是什么,&(在C++中)*,和[]?[也许"优先"不是正确的术语]
为了检查我是否正确理解了'螺旋规则',我也在下面解析这个表达式; 请告诉我,如果我错了.
+-----------+
| +------+ |
| | +-+ | |
| | ^ | | |
char* (*(* a[N])())();
^ ^ ^ ^ ^ ^
| | | | | |
| | +---+ …Run Code Online (Sandbox Code Playgroud) 这个:
const int a = 5;
Run Code Online (Sandbox Code Playgroud)
编译得很好,而
const var a = 5;
Run Code Online (Sandbox Code Playgroud)
没有......同时:
var a = 5;
Run Code Online (Sandbox Code Playgroud)
编译就像这样:
int a = 5;
Run Code Online (Sandbox Code Playgroud)
为什么?
template <typename T>
class Node
{...};
int main
{
Node* ptr;
ptr = new Node<int>;
}
Run Code Online (Sandbox Code Playgroud)
将无法编译我必须将指针声明为
Node<int>* ptr;
Run Code Online (Sandbox Code Playgroud)
为什么在声明指针时我必须指定类型我还没有创建类,为什么编译器必须知道它将指向哪种类型.并且不可能创建一个通用指针,然后决定我想要分配它的类型.
有人有主意吗?当我尝试合成我在.h文件中声明的属性时,它不让我合成它.有任何想法吗?谢谢!
我正在使用codeigniter 2.
感谢是否有人能够显示正确的方法来检查以下文件:
- 库文件是否已加载?
- 加载了帮助文件?
- 配置文件已加载?
- 模型文件已加载?
- 加载了third_party文件?
问候
以下代码必须在main-function中使用,但我不知道它是如何使用的.
struct SomeItem
{
enum {MOVIE, MUSIC} itemType;
union {
struct Movie* movie;
struct Music* music;
};
};
Run Code Online (Sandbox Code Playgroud)
这个结构用在带有previous/item/next指针的动态链表中,但我不知道如何设置枚举.或者如何初始化它.
我需要知道它在main函数中的样子.
biglist.someitem = ???;
/* declaration I use */
struct Library* biglist;
Run Code Online (Sandbox Code Playgroud)
更多代码,以了解我想要做什么.
struct Library{
struct SomeItem* someitem;
struct SomeItem* previousItem;
struct SomeItem* nextItem;
};
Run Code Online (Sandbox Code Playgroud)
编译错误:C2037:'someitem'左边指定未定义的struct/union'library'C2065:MOVIE:未声明的标识符
我仍然是ANSI C的新秀,所以不要拍我好;)
灵感来自这个问题.假设我有class Lock一个默认的构造函数,在某些代码中我编写了以下语句:
Lock();
Run Code Online (Sandbox Code Playgroud)
这将产生创建临时对象class Lock并立即销毁它的效果.当然,创作可能会产生一些副作用,这会改变程序行为,但这看起来很奇怪.
所以我的第一个猜测是,从语言角度看,这些语句完全有效,很可能包含逻辑错误.
上述声明是否有一些有效的用例?是否有一些众所周知的流行习语包括这些陈述?为什么我要在正确的程序中使用这些语句?
我想弄清楚一些C声明.这些C声明的含义是什么?
double (*b)[n];
double (*c[n])();
double (*d())[n];
Run Code Online (Sandbox Code Playgroud) 我在C文件中定义了一个变量:int x我知道extern int x如果我想在其他文件中使用它,我应该用它来在其他文件中声明它.
我的问题是:我应该在其他文件中将其声明在哪里?
在所有功能之外,
// in file a.c:
int x;
// in file b.c:
extern int x;
void foo() { printf("%d\n", x); }
Run Code Online (Sandbox Code Playgroud)在将使用它的功能内?
// in file b.c:
void foo() {
extern int x;
printf("%d\n", x);
}
Run Code Online (Sandbox Code Playgroud)我的怀疑是:
declaration ×10
c ×4
c++ ×4
templates ×2
c# ×1
class ×1
codeigniter ×1
constructor ×1
enums ×1
extern ×1
grammar ×1
pointers ×1
properties ×1
struct ×1
xcode ×1