C语言的基础知识(4)

本文介绍了指针在C语言中的基本概念,作为储存地址的变量,指针用于间接操作数据。文章详细讲解了指针的定义、用途,如通过指针地址改变变量值,以及指针的赋值、取值、取地址、加减运算。此外,还讨论了const关键字在指针中的应用,如何限制指针对数据的修改。
摘要由CSDN通过智能技术生成

# 一,指针

## 1,指针概念

```
概念:储存内容为地址的变量,称之为指针变量,简称指针。
```

## 2,指针变量定义

```
定义指针变量的语法如下:

     <存储类型> <指针指向的数据类型> *指针变量名;

例如:
  int *pi;     //pi ---指向int型数据的指针
  
  char *pc=NULL;  // pc ----指向char型数据的指针,同时给指针赋值空值NULL

```

## 3,  指针的用途

```
将数据的地址保存到指针中,目的是通过指针间接操作数据。

例如: 
int main(void)
{
    int a = 120;
    int* pa;

    pa = &a;   //将a的地址保存到pa中,我们就说pa指向a

    printf("a  = %d\n",a);
    a = 110;
    printf("a  = %d\n",a);

    printf("*pa = %d\n",*pa);  //通过指针pa取变量a的值打印
    *pa = 350;              //通过指针pa给变量a赋值
    printf("a  = %d\n",a);

    return 0;
}

```

## 4, 指针的运算

```
1》赋值运算  =
    给指针变量赋值,需要注意:左值和右值类型必须一致
    例如: 
    int a = 100;
    float b = 2.4;
    
    int *p;
    
    p = &a ;   //正确-左值int*的指针,右值必须是int类型数据的地址
    p = &b ;   //错误-左值int*的指针,右值不能是float类型数据的地址

2》取值运算  *
    取值运算也称为解引用,表示指针指向的数据。 注意:取值之前,指针必须先赋值,如果没有赋值将会出现不可预料的错误。
    例如:
    int main(void)
    {
        int a = 120;
        int* pa;
        float *pf,f;

        pa = &a;

        printf("a  = %d\n",a);
        a = 110;
        printf("a  = %d\n",a);

        printf("*pa = %d\n",*pa);  //通过指针pa取变量a的值打印
        *pa = 350;              //通过指针pa给变量a赋值
        printf("a  = %d\n",a);

        f = 2.6;
        pf = &f;
        printf("*pf = %f\n",*pf);   //pf没有赋值

        return 0;
    }    
    
3》取地址运算   &
    取地址表示数据在内存中的空间地址。
    例如: 
    int a = 120;    &a  ----表示a在内存中的空间地址
    float *p;       &p  ----表示p在内存中的空间地址
    
4》加法运算  +
    一个指针p只能加一个整数n,表示指针p向高地址偏移sizeof(*p)*n字节
    例如:
    int main(void)
    {
        char c;
        short s;
        int i;

        char* pc = &c;

        printf("&c = %p\n",&c);
        printf("pc = %p\n",pc);
        printf("pc + 1 = %p\n",pc+1);
        printf("pc + 3 = %p\n",pc+3);

        printf("-------------------------\n");
        short* ps = &s;

        printf("&s = %p\n",&s);
        printf("ps = %p\n",ps);
        printf("ps + 1 = %p\n",ps+1);
        printf("ps + 3 = %p\n",ps+3);

        printf("-------------------------\n");
        int* pi = &i;

        printf("&i = %p\n",&i);
        printf("pi = %p\n",pi);
        printf("pi + 1 = %p\n",pi+1);
        printf("pi + 3 = %p\n",pi+3);

        return 0;
    }

5》减法运算 -
    一个指针p可以减一个整数n,表示指针p向低地址偏移sizeof(*p) * n字节
    同类型指针可以相减,表示两个指针之间的内存空间中可以存放多少个指针指向的数据,所以结果为整数
    
6》关系运算
    两个指针中的地址高低比较
```

## 5, const关键字

```
当指针指向某个数据时,可以通过指针操作数据,但是,有时候只希望指针使用指向的数据而不要取修改指向的数据,为了保护指向的数据,在定义指针时,会通过const对指针进行限制。

const有三种形式的用法:
1》第一种形式
 int a = 120;
 const int *p = a;      //int const *p = &a;
 
 *p 只能打印a的值,不能给*p赋值。
 例如:
 int main(void)
{
    int a = 120;
    const int *p = &a;

    //*p = 240;
    printf("a = %d\n",a);
    return 0;
}

2》第二种形式:
    int a = 120,b = 240;
    int *const p = &a;
    
    p  只能使用,不能赋值
    例如: 
    p = &b;   //错误
    
3》第三种形式 ----前两种形式结合
 int a = 120,b = 240;
 const int * const p = &a;
 
 *p 不能赋值,只能使用
  p 也不能赋值,只能使用
    
 

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值