C语言指针

2019-06-17  本文已影响0人  一直很安静_25ae

一、指针变量的定义

格式 :变量类型 *指针变量名
举例 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

上一篇 下一篇

猜你喜欢

热点阅读