美文网首页
C语言指针

C语言指针

作者: 一直很安静_25ae | 来源:发表于2019-06-17 15:02 被阅读0次

一、指针变量的定义

格式 :变量类型 *指针变量名
举例 int *p ; char p;
注意:定义变量的时候
仅仅是指针变量的象征

#include <stdio.h>

void change(int);//函数的声明

int main()
{
    /*
    int a = 90;
    
    change(&a);
    
    printf("a=%d\n", a);//10 因为传的是地址,所以可以修改外部变量
    */
    
    // 基本数据类型的格式:变量类型  变量名;
    // 指针格式:变量类型 *变量名;  
    // 指针变量只能存储地址
    // 指针就一个作用:能够根据一个地址值,访问对应的存储空间
    // 指针变量p前面的int:指针变量p只能指向int类型的数据
    int *p;  // 定义了一个指针变量p
    
    int a = 90;
    
    // 指针变量p指向了变量a
    p = &a; // 指针变量只能存储地址
    
    *p = 10; //这个*的意义跟前面指针的定义含义是不一样的,定义的时候*只是一个标识,告诉编译器这是一个指针,而这里的*的含义是访问指向变量p指向的存储空间
    
    printf("%d\n", *p);
    
    //printf("%d\n", a);
    
    return 0;
}

void change(int n)
{
    n = 10;
}

二、利用指针变量简单修改其他变量的值

1.指向某个变量
int a;
int *p;
p = &a;
或者
int *p = &a;
2.修改所指向变量的值
*p = 10;
3.在函数内部修改外面变量的值
int a = 10;
change(&a);
void change(int *n)
{
*n = 20;
}

三 指针的注意事项

#include <stdio.h>

int main()
{
    /* 不建议的写法, int *p只能指向int类型的数据
    int *p;
    double d = 10.0;
    p = &d;
  */
    
    /* 指针变量只能存储地址
    int *p;
    p = 200;
    */
    
    /* 指针变量未经过初始化,不要拿来间接访问其他存储空间
    int *p;
    printf("%d\n", *p);
    */
    
   
    /*
   int a = 10;也可以用下面两句
    int a;
    a = 10;
    */
    
    /*
    int *p;
    p = &a;//这两句也可以用下面一行代替
   // 定义变量时的*仅仅是一个象征,没有其他特殊含义
    int *p = &a;
    */
   
    
    // 不正确的写法
    // *p = &a; //此时的*的含义是访问指向变量p指向的存储空间
    p = &a;
    
    // 这个时候的*的作用:访问指向变量p指向的存储空间
    *p = 20;
    
    
    char c = 'A';
    
    char *cp = &c;
    
    *cp = 'D';
    
    printf("%c\n", c);
    
    return 0;
}

指向指针的指针

#include <stdio.h>
int main()
{
    int a = 10;
    
    int *p = &a;
    
    int **pp = &p;
      
    **pp = 20;
    
    printf("%d\n", a);
    
    return 0;
}

指向指针的指针示意图


09-指向指针的指针.png

空指针

#include <stdio.h>
int main()
{
    double d = 10.5;
    double d2 = 10.5;
    
    double *p;
    p = &d;
    
    *p = 10.9;
    
    p = &d2;
    
    *p = 10.9;
    
    printf("d=%f, d2=%f\n", d, d2);
        
    // 清空指针
    p = 0;
    // p = NULL;
    
    // 清空指针后,不能再间接访问其他存储空间
    // *p = 100.7;
    
    return 0;
}

交换函数外面实参的值

#include <stdio.h>
void swap(int *v1, int *v2);

int main()
{    
    int a2 = 90;
    int b2 = 89;
    
    swap(&a2, &b2);
    
    printf("a2=%d, b2=%d\n", a2, b2);
    return 0;
}

/* 不能交换外面实参的值,仅仅是交换了内部指针的指向
void swap(int *v1, int *v2)
{
    int *temp;
    temp = v1;
    v1 = v2;
    v2 = temp;
}*/

// 完成两个整型变量值的互换
void swap(int *v1, int *v2)
{
    int temp = *v1;
    *v1 = *v2;
    *v2 = temp;
}

/* 交换的只是内部v1、v2的值
void swap(int v1, int v2)
{
    int temp = v1;
    v1 = v2;
    v2 = temp;
}*/

// 任何指针都占用8个字节的存储空间
char *cp;
int *ap;
long *bp;

%d int
%f float\double
%ld long
%lld long long
%c char
%s 字符串
%zd unsigned long

相关文章

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • C语言指针总结大学霸IT达人

    C语言指针总结大学霸IT达人 C语言的指针是C语言区别其它语言的最主要的特定之一。有了指针,C语言就可以抛开所有束...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • 在Swift中使用C语言的指针

    在Swift中使用C语言的指针 在Swift中使用C语言的指针

  • [Swift]结构体指针操作

    C语言的指针操作 在c语言中申明一个变量并通过指针修改该变量的值 a value is 2 c语言操作结构体指针操...

  • Go语言-指针

    Go语言中的指针不同于C语言,Go语言的指针使用方法要简单很多。当然和C语言从指针定义到指针的使用都有很大的不同。...

  • C语言中的指针与数组

    C语言中的指针与数组 @(C语言)[排序算法, 快速排序, C实现] 引言 相信指针与数组是不少同学在初学C语言时...

  • 指针数组和数组指针

    指针数组|存储指针的数组 在C语言和C++语言中,数组元素全为指针的数组称为指针数组。 例如:int *p[10]...

  • iOS开发 -- C语言基础8(指针)

    iOS开发 -- C语言基础8(指针) 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很...

网友评论

      本文标题:C语言指针

      本文链接:https://www.haomeiwen.com/subject/jcuafctx.html