程序开发平台哪个好/百度seo培训课程
1、指针数组
对于int *p1[5];
而言,因为[]
的优先级要比*
要高,所以p1
先与[]
结合,构成一个数组的定义,数组名为 p1。而int
修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个指向int
类型数据的指针,如下图所示,它是一个指针数组。
2、数组指针
对于语句int(*p2)[5]
,()
的优先级比[]
高,*
号和p2
构成一个指针的定义,指针变量名为p2
,而int
修饰的是数组的内容,即数组的每个元素。也就是说,p2
是一个指针,它指向一个包含 5 个int
类型数据的数组,如下图所示。很显然,它是一个数组指针,数组在这里并没有名字,是个匿名数组。
int **findtwo(int **arr, int m, int n) {int **res = (int **)malloc(sizeof(int *) * 2);res[0] = (int *) malloc(sizeof(int) * 2);res[1] = (int *) malloc(sizeof(int) * 2);res[0][0] = arr[0][0];res[0][1] = arr[0][1];res[1][0] = arr[1][0];res[1][1] = arr[1][1];return res;
}int main() {int arr[][3] = {{1, 2, 3},{4, 5, 6}};int *p[2] = {arr[0], arr[1]};int **res = findtwo(p, 2, 3);printf("%d\n", res[0][0]);printf("%d\n", res[0][1]);printf("%d\n", res[1][0]);printf("%d\n", res[1][1]);
}
/*
输出:
1
2
4
5
*/
3、二维数组传递
1、实参为二维数组名,形参为二维数组
void func(int n, char str[][5]) {for (int i = 0; i < n; i++)printf("str[%d] = %s\n", i, str[i]);
}int main() {char str[][5] = {"abc", "def", "ghi"};func(3, str);
}
/*
输出:
str[0] = abc
str[1] = def
str[2] = ghi
*/
void printStr(int arr[][2], int m, int n) {for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {printf("%d\n", arr[i][j]);}}
}int main() {int arr[][2] = {{1, 2},{3, 4},{5, 6}};printStr(arr, 3, 2);
}
/*
输出:
1
2
3
4
5
6
*/
2、实参为二维数组名,形参为数组指针
void func(int n, char (*str)[5]) {for (int i = 0; i < n; i++)printf("str[%d] = %s\n", i, str[i]);
}int main() {char str[][5] = {"abc", "def", "ghi"};func(3, str);
}
/*
输出:
str[0] = abc
str[1] = def
str[2] = ghi
*/
void printStr(int (*arr)[2], int m, int n) {for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {printf("%d\n", arr[i][j]);}}
}int main() {int arr[][2] = {{1, 2},{3, 4},{5, 6}};printStr(arr, 3, 2);
}
/*
输出:
1
2
3
4
5
6
*/
3、实参为指针数组,形参为指针的指针
void func(int n, char **str) {for (int i = 0; i < n; i++)printf("str[%d] = %s\n", i, str[i]);
}int main() {char str[][5] = {"abc", "def", "ghi"};char *p[3]={str[0], str[1], str[2]};func(3, p);
}
/*
输出:
str[0] = abc
str[1] = def
str[2] = ghi
*/
void printStr(int **arr, int m, int n) {for (int i = 0; i < m; i++) {for (int j=0; j<n; j++){printf("%d\n", arr[i][j]);}}
}int main() {int arr[][2] = {{1, 2},{3, 4},{5, 6}};int *p[3]={arr[0], arr[1], arr[2]};printStr(p, 3, 2);
}
/*
输出:
1
2
3
4
5
6
*/
4、实参为指针数组,形参为指针数组
void printStr(char *str[], int n) {for (int k = 0; k < n; k++) {printf("%s\n", str[k]);}
}int main() {char str[][5] = {"abc", "def", "ghi"};char *pstr[3] = {str[0], str[1], str[2]};printStr(pstr, 3);return 0;
}
/*
输出:
str[0] = abc
str[1] = def
str[2] = ghi
*/
void printStr(int *arr[3], int m, int n) {for (int i = 0; i < m; i++) {for (int j=0; j<n; j++){printf("%d\n", arr[i][j]);}}
}int main() {int arr[][2] = {{1, 2},{3, 4},{5, 6}};int *p[3]={arr[0], arr[1], arr[2]};printStr(p, 3, 2);
}
/*
输出:
1
2
3
4
5
6
*/