我的书说
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
不是指针。这是什么原因?
答案 0 :(得分:5)
C ++通常不关心空格,因此编译器认为以下两个语句是相同的:
typedef Card* Cardptr;
typedef Card *Cardptr;
同样,三个声明
int* a;
int *a;
int * a;
无法区分。
编码器编写声明的方式只是品味和风格的问题,两者都是合理的:如果他们移动
*
[那么]你会知道该类型实际上是Card
,Cardptr
只是指向它的指针,并且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?
现在,我的建议是:在这两种形式之间进行选择,坚持不懈。