c – 很难理解char的优先原则(* p)[sizeof(c)];

前端之家收集整理的这篇文章主要介绍了c – 很难理解char的优先原则(* p)[sizeof(c)];前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习指针并挑战自己,我尝试取消引用指向字符数组的指针.最终这有效:
char (*p)[sizeof(c)];

其中c是数组c [] =“something”

我很难理解(* p)[sizeof(c)];不同于* p [sizeof(c)];

基于我目前所知的(这并不多!)计算机在(* p)[sizeof(c)]的情况下这样说:

“p指向c!哦,顺便说一句,p是任何大小的数组(c)最终都是”.

但即使这对我来说也很奇怪,所以我想我在添加括号时会对构造的内容感到困惑.

谁能解释一下?

完整代码在上下文中:

#include <iostream>

using namespace std;

int main(int argc,char *argv[]) {

    char c[] = "something";

    char (*p)[sizeof(c)]; // this works
    // char *p[sizeof(c)]; // this doesn't?

    p = &c;

    cout << p << endl;  

    cout << *p << endl;
}

解决方法

可以使用非正式称为左右规则的内容来读取C中的类型.您从声明的变量的名称开始,然后在您可以的情况下向右移动,然后在您可以的情况下向左移动,然后重新开始.圆括号会阻止您,直到考虑了所有内容为止.

在你的例子中:

char (*p)[sizeof(c)];
       ^               p...                          (hit ')',turn around)
      ^                is a pointer...               (hit '(',turn around and remove '()')
         ^^^^^^^^^^^   to an array of `sizeof(c)`... (end of line,turn around)
^^^^                   chars.                        nothing left,we're done!

没有括号,这变为:

char *p[sizeof(c)];
      ^^^^^^^^^^^^     p is an array of `sizeof(c)`... (end of line,turn around)
^^^^^^                 pointers to char.

这确实是完全不同的.

原文链接:https://www.f2er.com/c/116814.html

猜你在找的C&C++相关文章