你先看我写的代码然后 再去理解你写的就好理解了
定义一个整型数组 int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
定义一个返回值为空的想用数组做形参的函数
//void fun(int a[10])--------(才开始学c语言是的写法)
//void fun(int a[]) ----------(学习一段时间后的写法)
void fun(int *a) ----------(最常用的写法 一般一维数组做函数参数是 编译器内部会把 形参 转化为指针, 因此我们如果要用一维数组做形参 一般都会直接写成指针形式)
{ 函数体 }
PS: 如果你以后接触到二维数组做形参时 可能会这样写:
void fun(int a[常量][常量]) void fun(int a[][常量]) 或 void fun(int (*a)[常量]) 三种形式
因为 数组要考虑步长问题 所以 会退化为数组指针
而指针数组 char *str[] = { "1111", "2222"}; 做形参时
void fun(char *str[]) 和 void fun(char **str) 两种形式
然后再看你的 void函数(u32 *a) 首先 u32应该是数据类型(一般 u32 是无符号 32位整型)
u32 *a 应该是 一维数组做函数参数(形参) 传入的是 数组 首元素地址;
注意: 还有一种情况 就是 想通过形参 去改 实参的值 (这得根据 你的代码具体来看) 因为 指针存在的最大意义就是间接赋值。
另外函数里 *a++意思是指针地址+1?
u32 p = u3常量;定义了一个变量
u32 *a = NULL; a = &p 定义了一个指针变量 并指向p(把p的地址赋给a) a++ 相当于地址加了一个(u32 类型所占内存的字节)数。 而*a++; 是对 a 该内存的值进行加1(也就是p加1);
希望 对你有帮助 还有不理解的地方 可以继续问我哦 |