定义指针类型时*号位置与功能的关系

14 篇文章 0 订阅

定义指针类型时*号位置与功能的关系

2007-05-11 10:22 lulapub  |  分类:其他编程语言  |  浏览1776次
常常看到这样的句子:int* a;和int *a; 请问这*号紧靠在类型后面和紧靠变量前面,在含义上有什么区别吗? 在使用变量时有什么区别吗?
举报| 2007-05-11 10:26 提问者采纳
没有区别,但有人建议写成紧靠变量,
比如你想声明两个指针a,b,如果紧靠类型,容易出现错误
int* a,b

以下文字摘自<高质量C++编程指南>:

修饰符 * 和 & 应该靠近数据类型还是该靠近变量名,是个有争议的活题。

若将修饰符 * 靠近数据类型,例如:int* x; 从语义上讲此写法比较直观,即x是int 类型的指针。

上述写法的弊端是容易引起误解,例如:int* x, y; 此处y容易被误解为指针变量。虽然将x和y分行定义可以避免误解,但并不是人人都愿意这样做。
提问者评价
谢谢指导, 我终于揭开了多年心中的疑团,一直觉得这问题有点傻瓜,也不敢问人!
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: strcmp() 函数用于比较两个字符串。它会按字典序比较两个字符串,并返回一个整数值来指示它们的大小关系。 如果第一个字符串小于第二个字符串,则返回一个负数。如果两个字符串相等,则返回 0。如果第一个字符串大于第二个字符串,则返回一个正数。 下面是用 C 语言实现 strcmp() 函数的示例代码: ``` int strcmp(const char *str1, const char *str2) { while (*str1 && *str2 && *str1 == *str2) { str1++; str2++; } return *str1 - *str2; } ``` 这段代码会按字典序逐个比较两个字符串的字符。如果遇到不同的字符,就返回两个字符的 ASCII 码之差,否则继续比较下一个字符。如果两个字符串都是空字符串(即 *str1 和 *str2 都是 0),则函数返回 0。 请注意,这个函数只能用于比较 ASCII 码为 1 字节的字符串。如果你要比较双字节字符串或其他字符集的字符串,可能需要使用另外的算法。 ### 回答2: 要使用C语言定义一个函数str来实现strcmp()函数的功能,首先需要了解strcmp()函数的作用。strcmp()函数用于比较两个字符串的大小,并返回一个整数值,该值表示两个字符串的大小关系。 在定义函数str之前,需要了解strcmp()函数的工作原理。strcmp()函数通过逐个比较两个字符串中的字符,直到找到两个不相等的字符或其中一个字符串的结束符'\0'。如果两个字符串相等,则返回0;如果两个字符串不相等,则返回两个不相等字符的ASCII差值。 下面是用C语言定义函数str的代码: ```c int str(const char *str1, const char *str2) { while (*str1 != '\0' && *str2 != '\0') { if (*str1 != *str2) { return (*str1 - *str2); // 返回不相等字符的ASCII差值 } str1++; str2++; } return (*str1 - *str2); // 返回两个字符串的长度差 } ``` 函数str的参数为两个const char指针类型的字符串str1和str2。函数通过逐个比较两个字符串中的字符来判断它们的大小关系。如果遇到不相等的字符,则返回两个字符的ASCII差值;如果遇到相等的字符,则继续比较下一个字符。当某个字符串达到结束符'\0',结束比较。如果两个字符串相等(都达到了结束符),则返回0。 使用定义的函数str来实现strcmp()函数的功能可以这样调用: ```c int main() { const char *str1 = "hello"; const char *str2 = "world"; int result = str(str1, str2); printf("%d\n", result); // 输出字符串的大小关系 return 0; } ``` 以上是用C语言定义函数str实现strcmp()函数的简单示例。这个函数可以用于比较两个字符串的大小并返回相应的结果。 ### 回答3: 在C语言中,可以定义一个函数str来实现strcmp()函数的功能。strcmp函数用于比较两个字符串是否相等。 ```c int str(const char *str1, const char *str2) { while (*str1 && (*str1 == *str2)) { str1++; str2++; } return *(unsigned char *)str1 - *(unsigned char *)str2; } ``` 这个函数使用了指针运算和ASCII码进行字符串的比较。它使用了while循环来遍历字符串,当且仅当两个字符相等才继续遍历。如果在遍历完字符串后两个字符依然相等,那么说明两个字符串完全相等;如果有一个字符不相等,那么返回的值就会是这两个字符的ASCII码的差值。 这个方法的优势是在比较字符串,每次只需要比较一个字符,而不需要创建额外的字符串或使用其他复杂的算法。因此,它具有较高的效率和简洁性。 使用这个函数可以实现strcmp()函数的功能,比如: ```c #include <stdio.h> int main() { const char *str1 = "Hello"; const char *str2 = "World"; int result = str(str1, str2); if (result == 0) { printf("字符串str1和str2相等\n"); } else if (result < 0) { printf("字符串str1小于str2\n"); } else { printf("字符串str1大于str2\n"); } return 0; } ``` 以上代码会输出"字符串str1小于str2",说明str1小于str2。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值