zoukankan      html  css  js  c++  java
  • C基础学习笔记——01-C基础第08天(指针上)

    在学习C基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

    01-C基础第08天(指针上)

    目录:
    1、指针和指针变量
    2、指针大小
    3、野指针和空指针
    4、万能指针void *
    5、const修饰的指针变量
    6、指针和数组
    7、多级指针

    1、指针和指针变量

    (1)内存区的每一个字节都有一个编号,这就是“地址”。

    (2)如果在程序中定义了一个变量,在对程序进行编译或运行时,系统就会给这个变量分配内存单元,并确定它的内存地址(编号)

    (3)指针的实质就是内存“地址”。指针就是地址,地址就是指针。

    (4)指针是内存单元的编号,指针变量是存放地址的变量。

    (5)通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样。

    2、指针大小

    (1)使用sizeof()测量指针的大小,得到的总是:4或8

    (2) sizeof()测的是指针变量指向存储地址的大小

    (3)在32位平台,所有的指针(地址)都是32位(4字节)

    (4)在64位平台,所有的指针(地址)都是64位(8字节)

    3、野指针和空指针

    指针变量也是变量,是变量就可以任意赋值,不要越界即可(32位为4字节,64位为8字节),但是,任意数值赋值给指针变量没有意义,因为这样的指针就成了野指针,此指针指向的区域是未知(操作系统不允许操作此指针指向的内存区域)。所以,野指针不会直接引发错误,操作野指针指向的内存区域才会出问题。

    但是,野指针和有效指针变量保存的都是数值,为了标志此指针变量没有指向任何变量(空闲可用),C语言中,可以把NULL赋值给此指针,这样就标志此指针为空指针,没有任何指针。

    4、万能指针void *

     void *指针可以指向任意变量的内存空间

    1     void *p = NULL;
    2 
    3     int a = 10;
    4     p = (void *)&a; //指向变量时,最好转换为void *
    5 
    6     //使用指针变量指向的内存时,转换为int *
    7     *( (int *)p ) = 11;
    8     printf("a = %d
    ", a);

    5、const修饰的指针变量

     1     int a = 100;
     2     int b = 200;
     3 
     4 //指向常量的指针
     5     //修饰*,指针指向内存区域不能修改,指针指向可以变
     6     const int *p1 = &a; //等价于int const *p1 = &a;
     7     //*p1 = 111; //err
     8     p1 = &b; //ok
     9 
    10 //指针常量
    11     //修饰p1,指针指向不能变,指针指向的内存可以修改
    12     int * const p2 = &a;
    13     //p2 = &b; //err
    14     *p2 = 222; //ok

    红框代表不可以这样操作。

    6、指针和数组

    数组名字是数组的首元素地址,但它是一个常量,不可以修改。

    指针加减运算

    (1)指针计算不是简单的整数相加

    (2)如果是一个int *,+1的结果是增加一个int的大小

    (3)如果是一个char *,+1的结果是增加一个char大小

    指针数组:它是数组,数组的每个元素都是指针类型。

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     //指针数组
     6     int *p[3];
     7     int a = 1;
     8     int b = 2;
     9     int c = 3;
    10     int i = 0;
    11 
    12     p[0] = &a;
    13     p[1] = &b;
    14     p[2] = &c;
    15 
    16     for (i = 0; i < sizeof(p) / sizeof(p[0]); i++ )
    17     {
    18         printf("%d, ", *(p[i]));
    19     }
    20     printf("
    ");
    21     
    22     return 0;
    23 }

    7、多级指针

    (1)C语言允许有多级指针存在,在实际的程序中一级指针最常用,其次是二级指针。

    (2)二级指针就是指向一个一级指针变量地址的指针。

    (3)三级指针基本用不着,但考试会考。

     1     int a = 10;
     2     int *p = &a; //一级指针
     3     *p = 100; //*p就是a
     4 
     5     int **q = &p;
     6     //*q就是p
     7     //**q就是a
     8 
     9     int ***t = &q;
    10     //*t就是q
    11     //**t就是p
    12     //***t就是a

    在学习C基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

  • 相关阅读:
    获取Finacial dimension value的description 值
    创建一个List获取数据的lookup
    定位form光标行
    Business Unit Lookup in Form
    Linu各种版本
    redis的具体使用
    php中date()函数使用的方法
    Spring整合Hibernate中自动建表
    Android之手机电池电量应用
    SSH整合时,关于访问数据库的load的错误
  • 原文地址:https://www.cnblogs.com/Alliswell-WP/p/C_BasicLearning_08.html
Copyright © 2011-2022 走看看