一,二维数组和二级指针的关系
重要一点是*p就是一维数组的首地址
二级指针和数组的关系:
arr[3][4] 是一个二维数组 把二维数组的首地址给二级指针**p
- 那么一个星的*p就是就是arr[0]的地址, (p + 1)就是arr[1]的地 址 ((p + 1)+ 2)是arr[1][2]的地址
- arr[1] 就是*(p + 1) , arr[1][2] =====((p + 1) + 1)
/*************************************************************************
> File Name:
> Author: songli陈松songli
> QQ:2734030745
> Mail: 15850774503@163.com
> Created Time:
************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(int argc, char *argv[])
{
int arr[][6] =
{
{ 2, 4, 5, 6, 7, 8,},
{ 20, 40, 50, 60, 7000, 8000 },
{ 200, 400, 50, 6000, 7000, 8000 },
{ 2000, 4000, 5000, 6000, 7000, 8000 }
};
printf("**arr= %d\n", *(*(arr + 3) + 1));// *(arr + 3) 就是一个地址
printf("%d\n", *(arr[3] + 2)); //arr[3] 就是一个地址
printf("\n");
system("pause");
return EXIT_SUCCESS;
}
效果图
二,二级指针冒泡排序
分析思路
比较地址
/*************************************************************************
> File Name:
> Author: songli
> QQ:2734030745
> Mail: 15850774503@163.com
> Created Time:
************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define N 9
int main(int argc, char *argv[])
{
int arr[N];
int *p, *q;
int *tmp = (int *)malloc(sizeof(int) * 1);
for (p = arr; p - arr < N; p++)
scanf("%d", p);
for (p = arr; p - arr < N; p++)
printf("arr[%d] = %d \n", p, *p);
int *pos;
for (p = arr; p - arr < N - 1; p++)
{
for (q = p + 1; q - arr < N ; q++)
{
pos = p; //地址
if (*q < *p) //比较两个值得大小
{
pos = q ;
}
if (pos != p)
{
*tmp = *pos;
*pos = *p;
*p = *tmp;
}
}
}
for (p = arr; p - arr < N; p++)
printf("arr[%d] = %d \n", p, *p);
printf("\n");
system("pause");
return EXIT_SUCCESS;
}
三, 指针数组的考察
#include<iostream>
int main(int argc, char *argv[])
{
int n[][3] = { 10, 20, 30, 40, 50, 60};
int (*p)[3];
p = n;
cout << p[0][0] << "," << *(p[0] + 1) << ", " << (*p)[2] << endl;
return 0;
}
输出的结果:
10,20,30
还是上面说 *p就是 n[0]
修改一下
#include<iostream>
int main(int argc, char *argv[])
{
int n[][3] = { 10, 20, 30, 40, 50, 60};
int (*p)[3];
p = n;
std::cout << p[0][0] << "," << *(p[0] + 1) << ", " << (*p)[2] << std::endl;
std::cout << p[1][0] << "," << *(p + 1)[0] << std::endl;
return 0;
}
输出结果
40, 40