当我们谈论解引用时,是否有必要*
在其中使用?如果我们以其他方式访问指针的所指对象,是否可以将其视为取消引用指针,例如:
char *ptr = "abc" ;
printf( "%c" , *ptr ); // Here pointer is dereferenced.
printf( "%s" , ptr ); // What about this one?
这是我问题的第一部分。
现在如果printf( "%s" , ptr )
是取消引用的一个例子,那么也请回答我问题的以下部分。
K&R 说
“指向 void 的指针”用于保存任何类型的指针,但不能自行取消引用
因此,
char a = 'c' ;
char *p = &a ;
void *k = &a;
printf( "\n%c\n" , *p );
printf( "\n%c\n" , *k );
不编译,编译器报错
在函数'main'中:警告:取消引用'void *'指针错误:无效使用void表达式
但是如果我们使用
char *a = "c" ;
char *p = a ;
void *k = a;
printf( "\n%c\n" , *p );
printf( "\n%s\n" , k );
它编译并工作。这意味着可以取消引用 void 指针 - 我们得到了对象指针所指的对象。
如果是这种情况,那么上面提到的 K&R 在这种情况下是什么意思?
谢谢你的时间。