疑问:关于strcmp()以及此指针表现形式*(char * *)a

阅读《C++程序设计教程》钱能,P(180)遇到如下表达式:

return strcmp(* (char * * )a, *(char * * )b);

关于这个表达式,其中strcmp()的原型:int strcmp(const char * str1, const char * str2)。不理解表达式:* (char * *)a

解惑:

1,(char * *)===>强制类型转换作用。

因为关于list[](也就是说a)的定义:  char * list[5]={"cat","car","cab","cap","can"}。这就是说,“list”是二级指针,所以在对类型进行强制转换时要使用上面的形式。

2,*(char * *)中最前面的“*”===>由strcmp()函数以及a的特性决定。

strcmp原型: int strcmp(const char * str1, const char * str2);  其中形参str1和str2都要是字符串指针(即这里要的是一级指针)。

a:   a[i]或者*(a+i)才代表字符串指针(即一级指针)。

原文地址:https://www.cnblogs.com/richard-c-java/p/3230289.html