
1.内存单元的编号地址指针2.其中p是指针变量用来存放地址的变量int main() { int a10; int *pa;//是取地址操作符取出的是a的地址 printf(%p,a);//%p是打印地址的符号 return 0; }3.int main() { int a10; int *pa; printf(%d,*p);//*对应的是解引用操作符*pa10 return 0; }4.指针变量的大小在X64下是8存储8比特X86是4存储4比特无论是int 类型char类型等5.指针类型决定走多大距离int main() { int a10; char*pca; int *paa; printf(%P,pc); printf(%P,pc1);//之间差1字节 printf(%P,pa); printf(%P,pa1);//之间差4字节 return 0; ]6.void可以接受任意地址但不可用于*void和void7.区分int *pa//代表初次创建指针变量p并初始化 *pa//代表赋值把a的值赋给*p pa//代表赋值p指向a的地址8.指针-指针元素之间的个数但前提是同int,同char等9.arrarr[0],取首元素地址arr取整个数组地址10.const是常变量不能被改变int const*p和const int*p,const 都在*P的左侧代表指针变量指向的内容可以改变但不可以通过*P去改变变量int*const pconst在*右侧代表指针变量指向内容不可以改变但可以通过*P去改变变量11.野指针原因未进行初始化可以用NULL进行预防越界进行访问指针指向的空间释放12.assert断言有错误就进行终止没有错误则正常进行头文件是#includeassert.h若确定没有问题可以用#define NDBUG去取消assert断言机制13.void test (int arr[])//函数中对应指针 { int sz2sizeof(arr)/sizeof(arr[0]);//在X64下为8/42 printf(%d,sz2); } int main() { int arr[]{1,23,6,5,4,8,6,2,1,4]; int sz1sizeof(arr)/sizeof(arr[0]);//对应10 printf(%d,sz1); return 0; }14.指针数组中数组的每个元素都是指针类型用指针数组模拟二维数组 int main() { int arr1[]{1,2,3,4}; int arr2[]{2,3,4,5}; int*arr[2]{arr1,arr2};//不能有【】 int i0; for(i0;i2;i) { int j0; for(j0;j4;j) { printf(%d,arr[i][j]); } printf(\n); } return 0; }15.数组指针指向数组的指针存储数组的地址int arr[]{1,2,5,6,3,2,5,9}; int (*p)[8]arr;//P是数组指针的变量16.void print(int arr[3][5],int r,int i) //省略 //对应二维数组的指针表示方法 int main() { int arr[]{1,5,3,6,2,5,6,2,5,8}; print(arr,3,5); return 0; }17.函数指针变量int (*pf)(int,int)add;//对应int add(intX,intY int r(*pf)(3,5);//对应r818.函数指针数组int (*pf arr[])(int,int){jia,jian,cheng,chu};//其中jia,jian,cheng,chu对应函数 例如 int add(int x,int y) { return xy; }19.qsort是库函数用于对数据排序20.区别strlen:用于字符串的字节数遇到\0停止char*用strlen计算字节数sizeof:用于元素的字节数与\0无关