指针与数组:
指针与一维数组:
int arrInt[] = {1,2,3,4,5};
int* pa = arrInt;
*pa <==> arrInt[0];
*(pa+1) <==> arrInt[1];
函数指针:
void func1();
void func2(int);
void func3(int, double);
int* func4();
声明函数指针:
void (*pf1)(); // pf1表示返回值void,没有参数的函数。
void (*pf2)(int); // pf2表示返回值void,参数只有一个int的函数。
void (*pf3)(int, double); // pf3表示返回值void,参数顺序为int、double的函数。
int* (*pf4)(); // pf4表示返回值int*,无参的函数。
函数指针赋值:(函数名就是一个内存地址)
pf1 = func1;
pf2 = func2;
pf3 = func3;
pf4 = func4;
函数指针调用:
(*pf1)(); 调用func1
(*pf2)(1); 调用func2
(*pf3)(1, 1.3); 调用func3
(*p4)(); 调用func4
函数指针数组:
void (*pf[3])(); 声明3个指向void func();函数的指针
指针函数:
返回值为指针的函数形似int* func();
指针数组:(存放指针的数组)
int *pa[3]; // []优先级高于*,[]先与int结合组成数组,再由int*声明数组元素为指针。
int a,b,c;
pa[0] = &a;
pa[1] = &b;
pa[2] = &c;
数组指针:(指向数组的指针,也叫行指针)
int (*pa)[3]; // ()、[]优先级一样高,从左到右结合,首先是()强调pa是指针,然后是[3]pa指向有三个元素的一维数组。
int arrInt[3] = {1,2,3};
pa = arrInt;
pa++; //跨越一个数组长度,越界操作。
数组指针通常与二维数组联用:
int arrDoubleInt[4][3];
pa = arrDoubleInt[0]; // 指向第一行
pa[0][1] == *(*(pa+0)+1) == 第一行第二列数据。
pa++; // 指向第二行
指针与一维数组:
int arrInt[] = {1,2,3,4,5};
int* pa = arrInt;
*pa <==> arrInt[0];
*(pa+1) <==> arrInt[1];
*(pa+2)=6; <==> arrInt[2]=6;
void func(int*);
void func(int arr[]); // 与void func(int*); 形式是一样的
void func(int arr[4]); // 只接收元素个数为4的整形数组
函数指针:
void func1();
void func2(int);
void func3(int, double);
int* func4();
声明函数指针:
void (*pf1)(); // pf1表示返回值void,没有参数的函数。
void (*pf2)(int); // pf2表示返回值void,参数只有一个int的函数。
void (*pf3)(int, double); // pf3表示返回值void,参数顺序为int、double的函数。
int* (*pf4)(); // pf4表示返回值int*,无参的函数。
函数指针赋值:(函数名就是一个内存地址)
pf1 = func1;
pf2 = func2;
pf3 = func3;
pf4 = func4;
函数指针调用:
(*pf1)(); 调用func1
(*pf2)(1); 调用func2
(*pf3)(1, 1.3); 调用func3
(*p4)(); 调用func4
函数指针数组:
void (*pf[3])(); 声明3个指向void func();函数的指针
指针函数:
返回值为指针的函数形似int* func();
指针数组:(存放指针的数组)
int *pa[3]; // []优先级高于*,[]先与int结合组成数组,再由int*声明数组元素为指针。
int a,b,c;
pa[0] = &a;
pa[1] = &b;
pa[2] = &c;
数组指针:(指向数组的指针,也叫行指针)
int (*pa)[3]; // ()、[]优先级一样高,从左到右结合,首先是()强调pa是指针,然后是[3]pa指向有三个元素的一维数组。
int arrInt[3] = {1,2,3};
pa = arrInt;
pa++; //跨越一个数组长度,越界操作。
数组指针通常与二维数组联用:
int arrDoubleInt[4][3];
pa = arrDoubleInt[0]; // 指向第一行
pa[0][1] == *(*(pa+0)+1) == 第一行第二列数据。
pa++; // 指向第二行