指针的使用

本文详细介绍了C语言中的指针,包括指针的定义、类型、使用方法,如NULL指针、指针算术运算、递增递减、比较、数组、指向指针的指针以及在函数中的应用,如参数传递和返回指针。此外,还涉及到了函数指针和回调函数的概念。通过实例展示了指针在实际编程中的运用,旨在深化对C语言指针的理解。
摘要由CSDN通过智能技术生成

写在前面的话

今天也是参考牛客网学习C(enum(枚举);指针)的第六天了呀!!! 加油,冲鸭!!!
原文网址
指针

指针是什么

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。

各种指针类型的展示

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch;     /* 一个字符型的指针 */

如何使用指针

#include <stdio.h>
int main (){
   int  var = 20;   /* 实际变量的声明 */
   int  *ip;        /* 指针变量的声明 */
   ip = &var;  /* 在指针变量中存储 var 的地址 */
   printf("Address of var variable: %p\n", &var  );
   /* 在指针变量中存储的地址 */
   printf("Address stored in ip variable: %p\n", ip );
   /* 使用指针访问值 */
   printf("Value of *ip variable: %d\n", *ip );
   return 0;
}

产生下列结果

Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

NULL 指针

在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。

#include <stdio.h>
int main (){
   int  *ptr = NULL;
   printf("ptr 的地址是 %p\n", ptr  );
   return 0;
}

产生下列结果:

ptr 的地址是 0x0

在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的
内存地址 0 ;表明该指针不指向一个可访问的内存位置。

指针详解

概念 描述
指针的算术运算 可以对指针进行四种算术运算:++、–、+、-
指针数组 可以定义用来存储指针的数组。
指向指针的指针 C 允许指向指针的指针。
传递指针给函数 通过引用或地址传递参数,使传递的参数在调用函数中被改变。
从函数返回指针 C 允许函数返回指针到局部变量、静态变量和动态内存分配。

指针的算术运算

C 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、–、+、-。

递增一个指针

在程序中使用指针代替数组,因为变量指针可以递增,而数组不能递增,数组可以看成一个指针常量。下面的程序递增变量指针,以便顺序访问数组中的每一个元素:

#include <stdio.h>

const int MAX = 3;

int main ()
{
   int  var[] = {10, 100, 200};
   int  i, *ptr;

   /* 指针中的数组地址 */
   ptr = var;
   for ( i = 0; i < MAX; i++)
   {

      printf("存储地址:var[%d] = %x\n", i, ptr );
      printf("存储值:var[%d] = %d\n", i, *ptr );

      /* 移动到下一个位置 */
      ptr++;
   }
   return 0;
}

产生下列结果:

存储地址:var[0] = bf882b30
存储值:var[0] = 10
存储地址:of var[1] = bf882b34
存储值: var[1] = 100
存储地址:of var[2] = bf882b38
存储值:var[2] = 200
递减一个指针

同样地,对指针进行递减运算,即把值减去其数据类型的字节数,如下所示:

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的共享指针使用方式可以通过使用智能指针来实现。在C++11及以上的标准中,可以使用std::shared_ptr来管理共享资源。 以下是使用共享指针的基本步骤: 1. 包含头文件: ```cpp #include <memory> ``` 2. 创建共享指针: ```cpp std::shared_ptr<int> sharedPtr(new int); // 使用new关键字初始化指针,引用计数为1 ``` 3. 共享指针的拷贝: ```cpp std::shared_ptr<int> sharedPtr2 = sharedPtr; // 创建sharedPtr的副本,引用计数加1 ``` 4. 访问指针所指向的对象: ```cpp int value = *sharedPtr; // 解引用共享指针获取对象的值 ``` 5. 释放共享指针: ```cpp sharedPtr.reset(); // 引用计数减1,如果引用计数为0,则释放指针所指向的对象内存 ``` 6. 检查共享指针是否为空: ```cpp if (sharedPtr != nullptr) { // 共享指针不为空,可以访问其所指向的对象 } ``` 7. 使用共享指针作为函数参数: ```cpp void foo(std::shared_ptr<int> ptr) { // 在函数内部使用共享指针 } std::shared_ptr<int> sharedPtr(new int); foo(sharedPtr); // 将共享指针作为函数参数传递 ``` 注意事项: - 避免使用原始指针与共享指针混合使用,这可能导致引用计数错误。 - 避免循环引用,即两个或多个共享指针相互引用,导致引用计数无法减为0,从而导致内存泄漏。 这是一种常见的使用共享指针的方式,但在实际使用时,请根据具体场景和需求选择适合的智能指针类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值