1、这个方法的功能是字符串翻转
2、p和q的值
3、这里涉及的指针概念比较绕
#include <stdio.h>
#include <stdlib.h>
/*冒泡排序*/
void f(char s[]) {
/*
知识点【星号在C语言里的含义】
1)乘法,1*1
2)定义指针变量,char* p,数据类型后面
3)解引用运算符,引用地址指向的值,char *p,变量前面
指针其实是一个整形变
用来存储其它变量的地址
*/
char *p = s; // 定义一个指针p,值为abcde,p默认指向字符串的首个字符地址
char *q = s; // 定义一个指针q,值为abcde,p默认指向字符串的首个字符地址
char t; // 定义一个字符
while (*++q); // ++q指针指向下一个地址,*++q,取指针指向下一个地址的值,就是空值
q--; // 上一个指针指向e,abcde
// 第一次循环:p<q 》a < e 》True
while (p < q) {
t = *p; // p=abcde,*p取第一个值a,赋值给t
*p = *q; // *q=e,将e值赋值给*p=ebcde
*q = t; // t=a,将a赋值给*q,就是将a值赋值到e之前所在的地址,本来是p=ebcde,*q指针指向的是e的地址,a的值存放到e的地址,所有变为了ebcda
p++; // 指向第二个值开始,ebcda变成bcda
q--; // q--指向倒数第二位置 q由a变成da
}
}
int main()
{
char charArr[6] = { 'a','b','c','d','e' };
printf("%s\n", charArr);
f(charArr);
printf("%s\n", charArr);
printf("\n");
system("pause");
return 0;
}
不应该啊,代码运行了一下,没有问题啊,字符串倒置了