结构可以是“卡*”类型吗? (书中的例子)

时间:2017-09-01 00:38:44

标签: c++ pointers syntax typedef

我的书说

fid = fopen('your_file.txt', 'r+');   % Open for both reading and writing
data = fscanf(fid, '%c', Inf);        % Scan all contents into a character vector
data = regexprep(data, '\S', '$0 ');  % Insert space after all non-whitespace
fseek(fid, 0, -1);                    % Move file pointer to beginning of file
fprintf(fid, '%c', data);             % Output data
fclose(fid);                          % Close file

“将新类型名称typedef Card* Cardptr; 定义为类型Cardptr的同义词。”我看到Card*符号仅修改*,而其他同义词(如果有的话)则不会被Cardptr符号修改。这对我来说很困惑。我的书看起来似乎实际的结构类型是*,这使我认为其他同义词的类型为Card*,如

Card*

其中typedef Card* Cardptr, n; 也有类型n。如果他们像这样移动Card*符号会不会更清楚?

*

这样,您就会知道类型实际上是typedef Card *Cardptr, n; Card只是指向它的指针,而Cardptr不是指针。这是什么原因?

1 个答案:

答案 0 :(得分:5)

C ++通常不关心空格,因此编译器认为以下两个语句是相同的:

typedef Card* Cardptr;
typedef Card *Cardptr;

同样,三个声明

int* a;
int *a;
int * a;

无法区分。

  

如果他们移动* [那么]你会知道该类型实际上是CardCardptr只是指向它的指针,并且n不是指针。这是什么原因?

编码器编写声明的方式只是品味和风格的问题,两者都是合理的:

这会让我更喜欢int *a而不是int* a

int* a,b; // declares and int* and an int; illogical, right?

这会让我更喜欢int* a而不是int *a

int *a = 0; // a (an int*) is set to zero (a.k.a NULL), not *a; illogical, right?

现在,我的建议是:在这两种形式之间进行选择,坚持不懈。