- 指向数组的指针
int * p[ 10 ]定义了10个野指针;(指针数组)
int (* p) [ 10 ]定义了一个指向长度为10的数组的指针;sizeof( p ) = 8;
要区分两个概念
&a[ 0 ] 是数组首元素地址;
&a 是整个数组的首地址,二者在数值上相等,但意义不同;
关于二维数组的指针
*(a + i) çè a[ i ] çè&a[ i ][ 0 ] (属于int * 型)
*(*(a + 0) + 1)çè a[ 0 ][ 1 ]
a[ i ][ j ] çè *( * (a + i) + j)
- 指向函数的指针
int (* pfn)( int a, int b);
pfn = add;
注意此处的函数名即为该函数的入口地址;
使用指针的目的是为了间接访问
此处的*pfn即为add本身自己
目的:为了降低函数的耦合性;
回调函数
回调函数是一种特殊的函数,它作为参数传递给另一个函数,并在被调用函数执行完毕后被调用。
- 指向指针的指针:二级指针
Char **p
要修改变量的值需要给被调函数中传递该变量的地址;
Char ** s == char * s[ ]
- 指针数组作main函数的形参
argc和argv 就是main函数的形参;
main函数是由操作系统调用的;