景德镇市建设局建设信用网站,国外网站打开速度慢的原因,企业自助建站网,百度手机网站优化指针的定义 在c/c中#xff0c;有一个特殊的变量指向我们电脑中某个内存地址#xff0c;进而可以让我们操作这段内存#xff0c;指的就是指针类型 语法#xff1a; int a 10;
int* p a;符号是取出某个变量的内存地址 把这个内存地址赋值给一个变量p#xff…指针的定义 在c/c中有一个特殊的变量指向我们电脑中某个内存地址进而可以让我们操作这段内存指的就是指针类型 语法 int a 10;
int* p a;符号是取出某个变量的内存地址 把这个内存地址赋值给一个变量p而接收我们内存地址的变量类型就为 类型* 指针类型 因为a的类型为int所以a的指针类型为int* *p是取出该地址的值 #include iostreamusing namespace std;int main() {int a 10;int *p a;cout a的值 a endl;cout a的内存地址 p endl;cout 取指针p内存地址的值 *p endl;return 0;
}通过指针操作a的值 // 通过*p修改a的值
*p 58;
cout 修改后的a的值 a endl;指针数组
原生数组中的地址 可以看到数组中元素的地址是连续的因为int为四个字节所以每次地址都加4 #include iostreamusing namespace std;int main() {int a[] {1, 2, 3, 4, 5};// 循环取址for (int i: a) {cout i endl;}return 0;
}直接打印数组的内存地址和数组内第一个元素的内存地址是一样的 cout 直接打印数组的地址 a endl;
cout 打印数组第一个元素的地址 a[0] endl;创建存放指针的数组
语法int* a[指针数组的大小];使用指针数组操作数组#include iostreamusing namespace std;int main() {int a[] {1, 2, 3, 4, 5};int *p_a[5];for (int i 0; i 5; i) {p_a[i] a[i];}for (int *i: p_a) {cout i endl;cout *i endl;}for (int *i: p_a) {*i 1516;}cout endl;for (int *i: p_a) {cout *i endl;}return 0;
}多级指针 指针也是一个变量变量都有地址所以指针类型也有他的地址 其实某个变量的指针就是把该变量十六进制的内存地址存放到了指针类型的变量里 直接打印a变量的地址和打印a变量的指针内容是一样的 #include iostreamusing namespace std;int main() {int a 20;cout a endl;int *p_a a;cout p_a endl;return 0;
}所以指针可以有多级 这里其实是p_a指针指向了a的内存地址pp_a指向了指针p_a的内存地址ppp_a指向了pp_a的内存地址所以取值的时候三次*可以取出来a的值。 #include iostreamusing namespace std;int main() {int a 20;int *p_a a;int **pp_a p_a;int ***ppp_a pp_a;cout ***ppp_a endl;return 0;
}指针类型占用的字节 前面说了指针的内容就是一个十六进制的内存地址所以为数字我们打印指针类型的大小为8个字节所有的指针类型都为8个字节 #include iostreamusing namespace std;int main() {int a 20;int *p_a a;char b a;char *p_b b;cout sizeof p_a endl;cout sizeof p_b endl;return 0;
}指针的加减 指针的加减随指针类型改变例如int为4个字节int *类型的指针1就是4个字节long long类型为8个字节long long*类型的指针1就为8个字节 #include iostreamusing namespace std;int main() {int a 20;int *p_a a;long long c 10;long long*p_c c;cout int *类型的加1 endl;cout p_a endl;cout p_a 1 endl;cout p_a 2 endl;cout long *类型的加1 endl;cout p_c endl;cout p_c 1 endl;cout p_c 2 endl;return 0;
}