指针和函数
图中,swap中采用传址调用,*px中就是整形a的值,*py就是整形b的值。执行*px和*py的互换也就是执行a和b的互换。
如果采用传值调用会出现什么呢?
在哈函数调用的过程中,a,b的值分别传给了x和y。在执行swap后,仅仅发生了x和y的互换,在函数执行结束之后,这块空间便会释放,main函数中并未发生a和b的互换。简而言之,就是“单向传递”的“值传递”的方式,形参值得改变并不会影响实参。
注意:函数的调用可以(而且只可以)得到一个返回值(即函数值),而且使用指针变量作为参数,可以得到多个变化了的值。
指针和数组
这个示例中,我们定义了一个包含5个整数的数组arr。然后,我们将arr赋值给指针变量ptr,此时ptr指向数组的首元素arr[0]。然后,我们使用指针来访问数组的元素,可以通过指针运算符"*"来访问指针指向的元素。通过对指针进行自增运算,指针可以移动到下一个元素。
- 这个示例中 ptr=arr 是把arr中首元素的地址赋给了指针变量ptr。
- 指针变量已经指向arr[0]的元素,进行ptr++是指向同一数组的下一个元素。(当然也可以进行减法操作)
- ++(*p),*p指向arr[0],++*p就是++arr[0]是2。
如图示例,p指向a数组首元素的位置,p+1指向a数组第一个元素的位置,以此类推……
引用数组的元素(综上所述)
- 下标法
- 指针法
数组作为函数的参数
在上述例子中,printArray函数的第一个参数是一个整型数组,第二个参数是数组的长度。在main函数中,我们定义了一个整型数组array,并计算出其长度。然后,将数组名array和长度作为参数传递给printArray函数。函数内部通过数组名arr来访问和修改数组元素。
当然也可以
总而言之,实参数组名代表一个固定的地址,或者说就是一个指针变量,但是形参数组名并不是一个固定的地址,而是按指针变量处理。