任何人都可以解释为什么这个错误 "expected identifier before '(' token" 会在我的代码中弹出?
Anyone can explain me why this error "expected identifier before '(' token" is popping out in my code?
#include <stdio.h>
#include <stdlib.h>
#define size 2
typedef struct data{
char name[20], address[20];
int number;
}person;
int main()
{
person p[size];
for(int i = 0; i < size; i++){
printf("Type the person's name %d\n", i + 1);
scanf("%20s", p[i].name);
}
printf("%c", (p + 1)->(name + 1));//where the error happens
return 0;
}
好吧,我想做的是打印出第二个结构数组的第二个字母,但是正如您所看到的,指出了错误,我不明白为什么会这样,因为如果“printf ("%c", (p + 1)->name[1])" 被写下来而不是向上延伸它起作用了,我
取了指针的名称是指向数组首地址的指针
account,因此是一段代码“name + 1”,因为 name 也是一个指针。那么,为什么会这样呢?与Title中写的错误有什么关系?
->
运算符的右侧应该是一个标识符,用于指定结构或联合中的字段名称。相反,您有一个带括号的表达式。
你应该写成:
(p + 1)->name + 1
但是此表达式的类型为 char *
,而不是 %c
格式说明符所期望的 char
,因此它实际上应该是:
*((p + 1)->name + 1)
或者更好的是,使用数组索引符号而不是显式指针算法和取消引用:
p[1].name[1]
#include <stdio.h>
#include <stdlib.h>
#define size 2
typedef struct data{
char name[20], address[20];
int number;
}person;
int main()
{
person p[size];
for(int i = 0; i < size; i++){
printf("Type the person's name %d\n", i + 1);
scanf("%20s", p[i].name);
}
printf("%c", (p + 1)->(name + 1));//where the error happens
return 0;
}
好吧,我想做的是打印出第二个结构数组的第二个字母,但是正如您所看到的,指出了错误,我不明白为什么会这样,因为如果“printf ("%c", (p + 1)->name[1])" 被写下来而不是向上延伸它起作用了,我 取了指针的名称是指向数组首地址的指针 account,因此是一段代码“name + 1”,因为 name 也是一个指针。那么,为什么会这样呢?与Title中写的错误有什么关系?
->
运算符的右侧应该是一个标识符,用于指定结构或联合中的字段名称。相反,您有一个带括号的表达式。
你应该写成:
(p + 1)->name + 1
但是此表达式的类型为 char *
,而不是 %c
格式说明符所期望的 char
,因此它实际上应该是:
*((p + 1)->name + 1)
或者更好的是,使用数组索引符号而不是显式指针算法和取消引用:
p[1].name[1]