ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

c++指针相关知识:

c++指针相关知识: 一.指针 是一种数据类型 这种数据类型定义出来的变量可以存储对应类型变量的内存地址通过这个地址找到变量的内存空间进行数据修改。定义指针的格式 数据类型 *变量名 //数据类型:定义这个指针存储的是一个什么类型变量的地址 // * :指针定义时的标记//变量名:指针变量名例如int *pa a;二.注意指针变量在内存也有自己的地址1 printf(%d\n, pa);pa是指针变量,存储的是变量 a 的内存地址,输出一串地址数字2 printf(%d\n, *pa);*pa ——— 解引用* 是解引用运算符*pa去 pa 保存的那个地址取出地址里面的数 据等价于 a输出变量 a 的值3 printf(%d\n, pa);取地址运算符pa获取指针变量 pa 本身在内存中的地址pa 本身也是一个变量它 也要占内存有自己的地址输出的是一串地址三.数组的地址存储的是数组内存空间的首地址即数组中第一个元素的地址。因此取数组的地址和取数组中第一个元素的地址是相同的操作。1 printf(%p\n, arr);2 printf(%d\n, *arr);3 printf(%d\n, *(arr 1));4 printf(%p\n, arr);5 printf(%p\n, arr[0]);表达式含义类型数值arr首元素地址int *和arr[0]相同*arr首元素的值intarr[0]*(arr1)第 1 号元素的值intarr[1]arr整个数组的地址int (*)[N]数值和arr一样但类型不同arr[0]首元素地址int *和arr相同1 arr数组名在表达式中会隐式转为指向数组首元素的指针。arr→arr[0]得到首元素的地址是一个指针值。2 *arr对首元素地址解引用等价于arr[0]拿到数组第 0 个元素的值。3 *(arr 1)指针运算arr1指向数组下一个元素*解引用等价于arr[1]拿到第 1 个元素的值。arr[i]本质就是*(arri)4 arr取整个数组的地址。地址的数值和 arr、arr[0] 一样但是类型不一样arr 是 int*arr 是 int (*)[数组长度]数组指针。如果做 arr 1会跳过整个数组而不是只跳过一个 int。注意指针和数组指针的区别很大普通指针int *p → 指向一个 int 元素数组指针int (*p)[5] → 指向一整个 int 数组5 个 int最核心区别指针加减运算指针 1跳过的字节数 指针指向类型的大小int arr[5]; int *p1 arr;int (*p2)[5] arr;p1 1p1指向int1 移动sizeof(int)跳到下一个元素p2 1p2指向整个长度 5 的数组1 移动5 * sizeof(int)直接跳过整个数组四.数组扩容int len; len 10; int arr {1,2,3,4,5,6,7,8,9,0}; //扩容 len len*2;//扩容一倍 int*arr1 (int*)malloc(len*4);//字节数 for(int i 0;ilen;i){ arr1[i] arr[i]; } arr arr1; //替换地址malloc:malloc 是 C 语言标准库函数动态内存分配。头文件#include stdlib.hmalloc(size) 分配 size 字节内容不初始化。
返回列表