C语言指针基本操作

c/c++

浏览数:242

2019-7-2

AD:资源代下载服务

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\n",p);
    printf("变量a的地址:%p\n",&a);
    p = &a;//将变量a地址赋值给指针
    printf("指针赋值后的地址:%p\n",p);
    printf("指针访问值:%d\n",*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\n",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\n",p);
             printf("p所指向的值:%d\n",*p);
            p++;
        }
    }
    

    运行结果

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

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

作者:段小辉