日志12

指针 1. 指针的基本概念 指针是一个变量,它存储的是另一个变量的内存地址。可以通过指针间接访问所指向的变量。就好像指针是一个“路标”,它指向内存中的某个位置。 2. 指针的声明与初始化 声明:指针变量的声明格式为数据类型* 指针变量名。 例如,int* p; 声明了一个名为p的指针,它可以用来指向一个int类型的变量。 初始化:指针可以在声明时初始化,也可以先声明后初始化。可以通过取地址运算符&来获取一个变量的地址并赋值给指针。 例如,int num = 5; int* p = &num; 这里p被初始化为num的地址。 3. 通过指针访问变量 使用解引用运算符*来访问指针所指向的变量。例如,对于上面的p和num,*p = 10;会将num的值修改为10,因为*p表示p所指向的变量,也就是num。 4. 指针与数组 在C++中,数组名实际上是一个指针常量,它指向数组的第一个元素。 例如,对于int arr[5]; arr等价于&arr[0]。可以使用指针来遍历数组。 例如: int arr[5] = {1, 2, 3, 4, 5}; int* p = arr; // 或者 int* p = &arr[0]; for (int i = 0; i < 5; i++) { cout << *p << " "; p++; } 在这个例子中,p首先指向数组arr的第一个元素,通过*p可以访问该元素的值。然后每次循环p向后移动一个元素的位置(因为p是指向int类型的指针,p++会使p的地址增加sizeof(int)),从而遍历整个数组。 5. 指针的运算 算术运算:指针可以进行算术运算,如加法、减法。当指针加上或减去一个整数n时,实际上它的地址会增加或减少n乘以指针所指向的数据类型的大小。例如,对于一个指向int类型(假设sizeof(int)=4)的指针p,p + 1会使p的地址增加4。 比较运算:可以比较两个指针的大小,通常用于判断两个指针是否指向同一个数组中的元素,或者判断一个指针是否在另一个指针之前或之后。 6. 多级指针(指针的指针) 可以有指向指针的指针。 例如, int num = 5; int* p = # int** pp = &p; 这里pp是一个二级指针,它指向指针p。通过多级指针可以实现更复杂的内存操作,如在函数中修改指针本身的值等。 7. 指针与函数 指针可以作为函数的参数传递,这样可以在函数内部修改外部变量的值,或者传递大型数据结构以提高效率(避免数据的复制)。 例如 void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } 这个函数可以交换两个整数变量的值。 函数也可以返回指针,但要注意返回的指针必须指向有效的内存区域,避免返回局部变量的指针,因为局部变量在函数结束后内存会被释放。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务