c语言继续学习2

 规则:C语言中,当一维数组作为函数参数的时候,编译器总是把它解析成一个指向首元素首地址的指针。

    当函数参数为多维数组时,可以将其看做是第一维的一维数组;如,func(int a[3][4]),此处的定义的指针类型为int (*p)[4];具体参考代码如下:

1.一维数组:

#include <iostream> void func(int a[100]) { int num = a[2]; int size = sizeof(a); printf("num = %d ", num); printf("size = %d ", size); } int main() { int buf[10] = {1,2,3,4,5}; func(buf); system("pause"); return 0; }

输入结果:

num = 3
size = 4

上述示例中,int a[100],首元素首地址的类型为int *;因此,此处的函数参数类型为int *类型;

2.二维数组

#include <iostream>

void func(int a[3][4])
{
    int num = a[1][0];
    int size = sizeof(a);
    printf("num = %d
", num);
    printf("size = %d
", size);
}

int main()
{
    int buf[4][4] = { {1,2,3,4},{5,6,7,8} };
    func(buf);

    system("pause");
    return 0;
}

上述func(int a[3][4])等同于func(int (*a)[4])  其中的[4]不能省略

int a[3][4]可以看做是一个一维数组a[3],其中每个元素是包含四个int元素的数组,a[3]的元素类型为int [4],那么指向a[3]的首元素的指针就是int (*p)[4]

原文地址:https://www.cnblogs.com/weiyouqing/p/12926286.html