1.数组的倒序排列
// ConsoleApplication3.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
int *swap(int *c, int b)
{
int *a = new int [b];
int i;
for (i = 0; i <= b - 1; i++)
{
a[i] = c[b - 1 - i];
}
return a;
}
int main()
{
const int u = 12;
int a[u];
int i;
for (i = 0; i <= 11; i++)
{
a[i] = i;
}
int *v=swap(a, u);
for (i = 0; i <= 11; i++)
{
cout << v[i]<<" ";
}
}
2.结构体和指针
// ConsoleApplication3.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
struct a
{
int b;
int c;
char d;
}*k[4];
int main()
{
a *p[4] = { &k[0],&k[1],&k[2],&k[3] };
cin >> p[0]->b >> p[1]->b >> p[2]->b >> p[3]->b;
a *o;
if (p[0]->b > p[2]->b)
{
o = p[0];
p[0] = p[2];
p[2] = o;
}
cout << p[0]->b << p[2]->b;
}
3.交换值的新思路
// ConsoleApplication3.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
void swap_(int *&a, int *&b)
{
int *c;
c = a;
a = b;
b = c;
}
int main()
{
int g = 23;
int k = 230;
int *a = &g;
int *b = &k;
swap_(a,b);
cout << *a << " " << *b;
}
4.数组和指针的几个重要的地方
int a = 12;
int *p = &a;
p++;
*p++;
*p++; *p+1; *(p+1)
我们在看几个重要的地方:
比如说 *p+1和*(p+1)
5.改变一个数组的原来的值
a.可以用指针;写的时候,形参写指针,实参写地址:可以是指针的内容,也可以是数组(会退化为指针),也可以是取地址;
b.可以用引用;形参是引用,实参是这个变量名;
c.可以用数组;形参是数组,实参是数组的名字;
d.可以用传地址;形参是*&p,实参是地址名。
6.倒序
// ConsoleApplication3.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
void swap_(int a[], int *p)//数组名经过传递,退化为指针
{
for (; a < p; a++, p--)
{
int t=*p;
*p = *a;
*a = t;
}
}
int main()
{
int a[2] = { 12,23 };
int *p;
p = &a[1];
swap_(a, p);
int i;
for (i = 0; i <= 1; i++)
{
cout << a[i];
}
}
总结一下:倒序或者换值的几个常见的思路:
1.可以采用中间值改变法;
2.可以试一试交换地址;
{对于地址的传递我们有如下几种方式:详见上方的总结}
3.可以再新构造一个类似的类型,在全局或者需要应用的地方还生存并具有可见性。
{再说一下,全局都存在的几个东西,第一个是全局变量,第二个是静态变量,第三个是栈区的数据;我们需要注意的是:全局静态变量和局部静态变量有一定的差别,前者和动态的区别是作用域,而后者和动态的差别是生产周期。}
7.我们接着对指针和引用做出一点解释
*&:指针的引用
typedef long typr ,*ptype;
这个语句完成的目的是声明typr是long的别名,ptype是long*的别名;指针的别名的作用大概是传指针时改变指针的地址,然后引用的使用的方法是:和原来的类型使用的方法完全一致;
8.一个对数组的特殊排列(如果有为0的数的话,需要将其放在首位,然后进行从小到大的排列)
// ConsoleApplication3.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
int * change(int a[], const int n)
{
int i, m,q,time=0,k;
int *b = new int[n];
for (i = 0; i <= n - 1; i++)
{
if (a[i] == 0)
time++;
}
if (time >= 1)
{
for (i = 0; i <= time - 1; i++)
{
*(b + i) = 0;
}
m = 0;
q = 0;
for (i = 0; i <= time-1 ; i++)
{
if (i != time - 1)
{
while (a[m] != 0)
{
*(b + time + q) = a[m];
q++;
m++;
}
m++;
}
else
{
while (a[m] != 0)
{
*(b + time + q) = a[m];
q++;
m++;
}
m++;
while (q != (n-time))
{
*(b + time + q) = a[m];
q++;
m++;
}
m++;
}
}
for (i = 1; i <= n - time - 1; i++)
{
for (k = time; k <= n - 2; k++)
{
if (*(b + k) >= *(b + k + 1))
{
int t;
t = *(b + k);
*(b + k) = *(b + k + 1);
*(b + k + 1) = t;
}
}
}
}
else
{
for (i = 0; i <= n - 1; i++)
{
*(b + i) = a[i];
}
for (i = 1; i <= n ; i++)
{
for (k =0; k <= n - 2; k++)
{
if (*(b + k) >= *(b + k + 1))
{
int t;
t = *(b + k);
*(b + k) = *(b + k + 1);
*(b + k + 1) = t;
}
}
}
}
return b;
}
int main()
{
const int n = 10;
int array[n];
int k;
for (k = 0; k <= n-1; k++)
{
cin >> array[k];
}
int *c=change(array, n);
for (k = 0; k <= n-1; k++)
{
if (k == 0)
{
cout << endl;
}
cout << *(c + k) << endl;;
}
//cout << *c;
//cout << *(c+1);
}
9.排序,字符串,记得用strcmp
// ConsoleApplication4.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
char *p[4];
const int n = 4;
int i,k;
for (i = 0; i <= n - 1; i++)
{
p[i] = new char[80];
cin >> p[i];
}
char *q;
for (i = 0; i <= n - 1; i++)
{
for (k = 0; k <= n - 2; k++)
{
if (strcmp(p[k],p[k+1])>0)
{
q = p[k];
p[k] = p[k + 1];
p[k + 1] = q;
}
}
}
for (i = 0 ; i <= n - 1; i++)
{
cout << p[i] << endl;;
}
return 0;
}