• C语言指针基本操作


    C语言指针基本操作

    指针介绍

    如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了。

    众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问。指针是一个变量,它的值是一个变量的内存地址【注意是内存地址】。

    指针表达式:

    type *var-name;
    //其中type代表C语言的数据类型,例如:int,double,char,float
    

    指针

    1. 指针声明

      指针进行声明时,=的右边必须为内存地址,不可以是变量(但是int*p=0;除外,该语句表示指针为空)

    2. 指针初始化

      在初始化指针的时候,如果暂时不需要赋值,可以将值赋值为NULL,可称为空指针。ps: *不赋值NULL也行,不过赋值NULL是一种好习惯,但是如果定义指针数组,大可不必这样。

    指针最基本使用

    首先先介绍一下指针最基本最基本的使用

    #include <stdio.h>
    void main(){
        int a = 10;
        int *p =NULL;   //如果将其写成 int *p = 10;那么程序肯定会报错,但是如果写成 int *p = 0,不会报错
        printf("指针赋值前的地址:%p
    ",p);
        printf("变量a的地址:%p
    ",&a);
        p = &a;//将变量a地址赋值给指针
        printf("指针赋值后的地址:%p
    ",p);
        printf("指针访问值:%d
    ",*p);
    }
    

    输出结果是:

    指针赋值前的地址:(nil)
    变量a的地址:0x7ffef9a9655c
    指针赋值后的地址:0x7ffef9a9655c
    指针访问值:10
    

    ps:(nil)就代表空的意思,不同的编译器显示不同。

    解释一下原理

    可以简单的理解为:

    如果在*p中,p代表一个内存地址,而这个内存地址中储存了一个值,那么使用*可以将这个值取出来,则*p就代表这个内存地址中的值。
    例如:

    #include <stdio.h>
    void main(){
        int a = 10;
        printf("结果是:%d",*(&a));
    }
    

    运行结果:

    结果是:10
    

    指针的基本应用

    指针与数组不可说的秘密

    简单点来说,指针跟数组没有半毛钱关系。只是说,经常将指针和数组拿过来共同使用,于是乎,两者便有了点关系。

    指针数组

    指针数组定义与数组定义类似

    int a[10];//定义一个数组
    int *p[10];//定义一个指针数组
    

    使用案例:

    #include <stdio.h>
    
    void main()
    {
        int a[] = {10,20,30};
        int *p[3];  //此时不要写成 int *p[3] =NULL;    
        for(int i =0;i<3;i++){
            p[i] = &a[i];    //对指针数组元素进行赋值
        }
        for(int j=0;j<3;j++){
            printf("第%d个值是%d
    ",j,*p[j]);
        }
    }
    

    运行结果:

    第0个值是10
    第1个值是20
    第2个值是30
    

    指针与数组

    1. 首先先说一下指针运算

      指针运算有点奇葩,和平常的有点不一样。假设ptr是一个指向int32位整数类型的指针,所指的地址是100,那么执行

      ptr++
      

      所得到结果是ptr将指向104
      对指针进行自加自减的操作,所加或者所减的值会根据数据类型而不同,可知,char类型的指针自加自减的值为1

    2. 指针指向数组

      int var[]={10,20,30};
      int *p = NULL;
      //将p指向数组的首个元素地址
      p = var;
      //等价于
      p = &var[0];
      
    3. 指针和数组

      #include <stdio.h>
      
      void main(){
          int var[] = {10,20,30};
          int *p;
          p = var;  //也可写做 p = &var[0];
          for(int i = 0;i<3;i++){
               printf("p所指向的地址:%p
      ",p);
               printf("p所指向的值:%d
      ",*p);
              p++;
          }
      }
      

      运行结果

       p所指向的地址:0x7fff9aa44a2c
       p所指向的值:10
       p所指向的地址:0x7fff9aa44a30
       p所指向的值:20
       p所指向的地址:0x7fff9aa44a34
       p所指向的值:30
      

    emm,简单的指针的使用就介绍到这里了,在下一篇中,我将会再介绍一下指针的其他操作

  • 相关阅读:
    Java——enum与int的转换——转载
    Java——JScrollPane设置透明——转载
    Java——JFrame与JButton添加背景
    Java——模态对话框
    u-boot_2010.6 nandflash驱动彻底分析
    linux 常用命令整理----权限管理
    linux 常用命令整理----链接文件
    linux 常用命令整理----文件操作
    linux 常用命令整理----目录操作
    linux 进程运行状态
  • 原文地址:https://www.cnblogs.com/xiaohuiduan/p/9867660.html
Copyright © 2020-2023  润新知