#include <stdio.h>
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p1 = a; // 指向数组的第一个元素
int *p2 = a + sizeof(a)/sizeof(a[0]) - 1;
while (p1 < p2)
{
int tmp = *p1;
*(p1++) = *p2;
*(p2--) = tmp;
}
int i;
for (i = 0; i < 10; i++)
{
printf ("M", a[i]);
}
printf ("\n");
return 0;
}
字符串指针典型错误:
// 典型错误1:将一个字符串写入到一个没有初始化的指针位置
int main2()
{
//char str[10];
//char *p = str;
char *p; // 野指针
printf ("p = %p\n", p);
scanf ("%s", p);
return 0;
}
// 典型错误2:用指针去修改字符串常量的值
int main4()
{
// 字符串: "hello" 是一个常量,不能用指针改变它的值
// 只能拿来使用
char *p = "wello";
*p = 'h';
printf ("%s\n",p);
return 0;
}
字符数组逆序:
//将 句子 I am from shanghai 逆序
#include <stdio.h>
#include <string.h>
int main()
{
// char *p = "I am from shanghai";
// char str[] = "I am from shanghai";
char str[] = "you are from shanghai";
// 将整个字符串逆序
char *p1 = str;
char *p2 = str + strlen(str) - 1;
char *p3 = NULL; // 用于将单词逆序
char tmp;
while (p1 < p2)
{
tmp = *p1;
*(p1++) = *p2;
*(p2--) = tmp;
}
puts(str);
// 再将每一个单词进行逆序,单词通过空格去找
p1 = str;
p2 = str;
while(*p2) // p2找到字符串结束为止
{
if (*p2 == ' ') // 找到一个单词,要将前面的单词进行逆序
{
p3 = p2 - 1;
while (p1 < p3)
{
tmp = *p1;
*(p1++) = *p3;
*(p3--) = tmp;
}
p1 = p2 + 1;
}
p2++;
}
p3 = p2 - 1;
while (p1 < p3)
{
tmp = *p1;
*(p1++) = *p3;
*(p3--) = tmp;
}
puts(str);
return 0;
