指针变量声明解析:int *(cmp)(char*,char*);含义及char*与char *的区别
嘿,让我一步步给你拆解这些C语言里的指针声明问题,搞清楚它们到底是什么意思:
1. 解析
int *(cmp)(char*, char*); 的含义 在C语言的声明规则里,函数调用运算符()的优先级要高于指针运算符*,所以我们先看cmp后面的括号——这说明cmp首先是一个函数。它的参数列表是两个char*类型的变量(也就是指向字符的指针)。
而前面的int *则表示:这个函数的返回值是一个指向int类型的指针。简单来说,cmp是一个“接收两个字符指针参数,返回一个int指针”的函数。
举个实际的函数定义例子,你就能更直观地理解:
int *(cmp)(char* str1, char* str2) { static int match_result = 0; // 这里可以写逻辑,比如比较str1和str2的内容,修改match_result的值 if (strcmp(str1, str2) == 0) { match_result = 1; } // 返回指向match_result的指针 return &match_result; }
2.
char* ptr1; 和 char *ptr2; 的区别 直接说结论:这两个声明在语义上完全没有区别,只是书写风格不同而已。
C语言里,*的位置并没有严格规定——char* ptr1是把char*当成一个整体(指向字符的指针类型)来书写,偏向于强调类型;而char *ptr2是把*和变量名放在一起,偏向于强调ptr2是一个指针变量。
不过这里要提醒一个新手容易踩的坑:如果在同一行声明多个变量,写法的差异会导致结果不同。比如:
char* ptr1, ptr2; // 注意!这里ptr1是char*类型,但ptr2是普通的char类型,不是指针! char *ptr3, *ptr4; // 这里ptr3和ptr4都是char*类型的指针
所以很多C语言老程序员更喜欢char *ptr的写法,因为在多变量声明时,能更清晰地标记每个指针变量,避免上面的错误。
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

