指针、数组
指针即地址。
(1)指针数组和数组指针
a、指针数组:是指一个数组里面装着指针,也即指针数组是一个数组; 定义形式:int *a[10],先是数组,后是指针;
b、数组指针:是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已; 定义形式:int (*p)[10],先是指针,后是数组。
核心要点:数组指针是指向数组的指针,指针数组是存放指针的数组。谁的运算优先级高就是谁--指针数组:数组优先级高是数组,数组指针:指针的优先级高是指针。指针数组和数组指针用于动态内存分配。
C语言内存的分配和释放函数malloc()和free(); 而C++使用 new 和 delete;
(2)函数指针和指针函数
函数指针:函数指针是指向函数的指针变量,即本质是一个指针变量。例如:int(*pfun)(int ,int)
用法:它包含了函数的地址,可以用来调用函数; 作为某个函数的参数 ,回调函数就是通过函数指针调用的函数;例如:
// 回调函数 void p(int *array, size_t arraySize, int (*getNextValue)(void)) { for (size_t i=0; i<arraySize; i++) array[i] = getNextValue(); } // 获取随机值 int getNextRandomValue(void) { return rand(); } int main(void) { int myarray[10]; p(myarray, 10, getNextRandomValue); for(int i = 0; i < 10; i++) { printf("%d ", myarray[i]); } printf("\n"); return 0; }
指针函数:本质是一个函数。函数返回类型是某一类型的指针。例如:int *fun(int x,int y);例如
int* find(void); int* find(){ int *pp ; pp= 0; return pp; } int main(int argc, const char * argv[]) { int *pp ; pp = find(); return 0; }
部分C++题目中,遇到形式:vector<int> nums; //表示声明不指定长度数组; vector<int> nums(n); // 指定长度为n
向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。在使用它时, 需要包含头文件 vector, #include<vector>。vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。
nums.size()
排序(O(nlogn)):
sort(nums.begin(),nums.end());
翻转:
reverse(nums.begin(), nums.end());
当需要函数的返回值-返回一整个数组。因为只能返回一个值,则需要返回数组的指针,即定义指针函数,例如:int* function(int *a,int b){ }; a是输入的数组