指针 2021.8.
-
字符指针: char* C语言中的char有时候指向一个字符,有时候指向一个字符数组,还有字符串。
char p1 = “hello” ; //
char* p2[] = “hello” ;
-
应该使用 strcmp 来比较字符串的内容是否相等。
-
写时拷贝
防止了修改而导致的整体出错。 -
指针数组:数组, 里面的每个元素都是指针。
int* a[10] ;
//长度为10 的数组,每个元素类型为 int* 类型数组指针:指针,指向了一个数组。(少用)。
int( *a)[10] ;
指针,指向了一个 int[10] 的数组,
a 的类型为int(*)[10]
1 ).
// arr 类型是 int( * )[4,而实参隐式转换成的指针 int(*)[5]
void test ( int (*arr ) [4] )
{
}
int main ()
{
int arr [3] [5] = { 0 } ;
test(arr) ;
}
类型不同,所以会出错。可改为:
void test ( int (*arr ) [5] )
2 ).
// int** 形参期望的实参是 int*[5] 指针数组
void test ( int** arr )
{
}
int main ()
{
int arr [3] [5] = { 0 } ;
test(arr) ;
}
3 ). 推荐写法,无错
void test ( int arr[3][4][5] ) //arr[][4][5] 、arr[10][4][5]也可
{
}
int main ()
{
int arr [3] [4][5] = { 0 } ;
test(arr) ;
}
4 ). 不可 类型不同
//形参类型 int(*)[10][5] 实参类型 int (*)[4][5]
void test ( int arr[][10][5] ) // int arr[][][5] 更不可
{
}
int main ()
{
int arr [3] [4][5] = { 0 } ;
test(arr) ;
}
对于更高维的数组 ,只有第一个 [ ] ,可以省略,其他的 [ ] 都不能省略,也不能写错。 实际中尽量把该写的 [ ] 都写上。