一键生成短网址,嘉兴优化公司,花灯彩灯制作公司,哪个网站推广产品好C语言之数组指针和指针数组 一、含义二、定义2.1 指针数组2.2 数组指针 三、使用3.1 指针数组在参数传递时的使用3.1.1 指针数组的排序3.2 数组指针在参数传递时的使用 一、含义 指针数组#xff1a;顾名思义#xff0c;其为一个数组#xff0c;数组里面存放着多个指针… C语言之数组指针和指针数组 一、含义二、定义2.1 指针数组2.2 数组指针 三、使用3.1 指针数组在参数传递时的使用3.1.1 指针数组的排序3.2 数组指针在参数传递时的使用 一、含义 指针数组顾名思义其为一个数组数组里面存放着多个指针指针的类型可选。 数组指针数组指针实质上就是一个指针用”数组”修饰这个指针意思是说这个指针存放着一个数组的首地址或者说这个指针指向一个数组的首地址。 明白了吧小伙子们。
二、定义
2.1 指针数组
char* (char_array[3]) {hello, world, GGBod}; //拥有3个元素的数组每个元素是一个char类型的指针总大小为 3*412 个字节
int* (int_array[4]) {1, 2, 3, 4};
struct Student* (struct_array[2]) {{xxx} ,{xxx}};上述括号可去掉这里只是方便大家理解。
2.2 数组指针
char (*char_point)[3]; //这里的括号便不可去掉用于指明这是一个指针这里是一个指向一个拥有三个char类型元素的数组的指针它指向数组的首地址当执行 char_point 时char_point会加3。
三、使用
3.1 指针数组在参数传递时的使用
指针数组常用在主函数传参在写主函数时参数有两个一个确定参数个数另一个指针数组用来接收每个参数字符串的地址。
int main(int argc, char *argv[])此时可以想象内存映像图主函数的栈区有一个叫argv的数组这个数组的元素是你输入的参数的地址指向着只读数据区。
如果是向子函数传参这和传递一个普通数组的思想一样不能传递整个数组过去如果数组很大这样内存利用率很低所以应该传递数组的首地址用一个指针接收这个地址。因此指针数组对应着二级指针。
void fun(char **pp); //子函数中的形参
fun(char *p[]); //主函数中的实参3.1.1 指针数组的排序
#include stdio.h
#include string.h
void sort(char **pa, int n) // 冒泡排序
{int i, j;char *tmp NULL;for (i 0; i n - 1; i){for (j 0; j n - 1 - i; j){if ((strcmp(*(pa j), *(pa j 1))) 0){tmp *(pa j);*(pa j) *(pa j 1);*(pa j 1) tmp;}}}
}int main(void)
{char *pa[4] {abc, xyz, opq, jiok};sort(pa, 4);for (int i 0; i 4; i){printf(%s\n, pa[i]);}return 0;
}3.2 数组指针在参数传递时的使用
void fun(int (*P)[4]);//子函数中的形参指针数组 a[3][4] {0};//主函数中定义的二维数组
fun(a);//主函数调用子函数的实参是二维数组的首元素首地址