C++求解释下面几个问题

1-void show_array1(int*, int);为什么函数的形参还能是指针,实际传入函数的是什么?
2- show_array1(&b[0][0], 3 * 3); &b[0][0]是什么b[0][0]的地址吗还是b[3][3]的首地址
3-void sort(int* p, int size)
{
int t;
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
{
if ((p + i) <=(p + j))
{
t = *(p + i);
*(p + i) = *(p + j);
*(p + j) = t;
}
}
}
}为什么外层for是size-1内层是size


// 78.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
using namespace std;
//声明函数原型要使用的函数
void show_array1(int*, int);
void show_array2(int a[], int);
void sort(int*, int);
int main()
{   //声明数组并初始化
    int a[10] = { 2,4,6,1,3,5 };
    int b[3][3] = { {2,4,6},{1,3,5},{0,1,2} };
    //显示数组的值
    cout << "show_array1(int*, int):" << endl;
    show_array1(a, 6);
    show_array1(&b[0][0], 3 * 3);
    //用sort排序并显示
    cout << "sort(int*, int) and show_array1(int*,int):" << endl;
    sort(a, 6);
    show_array1(a, 6);
    sort(&b[0][0], 3 * 3);
    show_array1(&b[0][0], 9);
    //显示数组的值
    cout << "show_array2(int a[],int):" << endl;
    show_array2(a, 6);
    show_array2(&b[0][0], 3 * 3);
    

    
}
//显示数组,用指针当参数
void show_array1(int* p, int size)
{
    for (int i = 0; i < size; i++)
        cout << *(p + i) << " ";
    cout << endl;
}
  //显示数组,用数组当参数
void show_array2(int a[], int size)
{
    for (int i = 0; i < size; i++)
        cout << a[i] << " ";
    cout << endl;
 }
//对数组按从小到大的顺序排列
void sort(int* p, int size)
{
    int t;
    for (int i = 0; i < size - 1; i++)
    {
        for (int j = i + 1; j < size; j++)
        {
            if (*(p + i) <=*(p + j))
            {
                t = *(p + i);
                *(p + i) = *(p + j);
                *(p + j) = t;
            }
        }
    }
}


1、参数类型可以使指针这个是允许的啊,没有为啥。为什麽不许指针类型参数呢?
2、&b[0][0]就是二维数组b的首地址,也就是b[0][0]的地址。

1.形参是指针,那么传入的当然是个指针了,比如传入int的地址而不是int的值,那么你就可以直接在函数内部改变外部传入的参数的实际值。当然它也可能是个数组的地址,它可能是任何东西的地址。
2.&就表示地址,&b[0][0]当然就是b[0][0]的地址,也是数组b的首地址。根本不存在b[3][3]的首地址这种东西,b[3][3]是第3行第3列
3.这不是典型的冒泡排序吗,你好好看看冒泡排序到底怎么排。你不这么写,到时候指针就溢出了
-=-=--
还是简单讲一下冒泡排序吧
冒泡排序,说白了就是相邻两个比大小,然后交换
那么左边的索引当然只能从0开始取到倒数第2个,不能取到最后一个,否则右边不超出数组范围了吗
同理右边的只能从1开始取到最后一个
然后就是左右相邻的比较大小