指针方式逆序数组

来源:互联网 发布:lte速率优化 编辑:程序博客网 时间:2024/05/23 12:22

#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 ("%4d", 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;