zoukankan      html  css  js  c++  java
  • Empire C:Basic 3

    首先我们定义一个表示年龄的指针:

    int* page; 这就是定义了一个指针,和定义普通变量就多了一个*符号而已。

    为什么变量名用了p开头,这里引用了英文pointer(指向),表示它是一个指针,而非普通变量,加不加p都无所谓。

    1.*号是取值运算符(间接访问),这里不是乘号的意思

    2.*号必须放在指针类型和指针变量中间,摆在哪里无所谓

    有3种方式:int* page; int *page; int * page;

    第一种是比较正规的写法,第2种是用的最多的,但是最好不要用第3种。

    一、明确几个概念:

    1.指针也是一种数据类型

    int* 这里表示定义了指向int类型变量的指针,并不是说定义了int类型的指针

    int* page 这里page是指针变量,它只能存放地址,C语言规定,只有指针类型的变量才能存放地址,不是你随随便便定义一个变量就能存放的。

    2.定义指针的时候兼具两个功能

    int *page=&age; 不仅获取了age的地址,同时也获取了age变量的值。

    3.指针使用之前必须先初始化,指针类型与指针指向类型一致。

    4.地址

    每个变量都有自己的地址,且都是唯一不重复的,而且地址不一定全都是数字。

    5.直接访问和间接访问

    • 直接访问:按变量地址存取变量值
    • 间接访问:通过存放变量地址的变量去访问变量

    二、指针数组&数组指针

    1.指针和数组的关系

    数组名就是一个指针,即地址

    int a[5] 这是一个int类型的数组

    它有5个元素,分别为a[0],a[1],a[2],a[3],a[4],这5个都是变量,和普通变量没多大区别

    这个数组的名字是a,可别弄成a[5]了

    a是一个指针常量(地址无法改变,不能指向其他变量), 它只存储着数组第一个元素的地址,即a[0]的地址

    所以我们用scanf()输入字符串的时候不需要&

    char a[5]

    scanf("%s",a)

    为什么只存储着第一个元素的地址,那其他元素怎么办?

    C语言中,数组的内存分配是连续的,也就是连在一起的,如果数组第一个元素的地址是1000,那第2个则是1001,所以知道了第一个元素的地址,就可以知道其他元素的地址。

    2.指针数组&数组指针

    指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针

    数组指针:a pointer to an array,即指向数组的指针

    还要注意的是他们用法的区别,下面举例说明。

    int* a[4]     指针数组     

                     表示:数组a中的元素都为int型指针    

                     元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*

    int (*a)[4]   数组指针     

                     表示:指向数组a的指针

                     元素表示:(*a)[i]  

    注意:在实际应用中,对于指针数组,我们经常这样使用:

    1 typedef int* pInt;
    2 pInt a[4];
    View Code
     

    这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。

    代码演示如下:

     1 include <stdio.h>
     2 
     3 int main()
     4 {
     5 int c[4]={1,2,3,4};
     6 int *a[4]; //指针数组
     7 int (*b)[4]; //数组指针
     8 b=&c;
     9 //将数组c中元素赋给数组a
    10 for(int i=0;i<4;i++)
    11 {
    12 a[i]=&c[i];
    13 }
    14 //输出看下结果
    15 printf("%d",a[1])l; //输出2就对
    16 printf("%d",(*b)[2]); //输出3就对
    17 return 0;
    18 }
    View Code

     

    参考文献:

    1.指针数组和数组指针的区别

    2.从零开始学编程---第一步-C语言

  • 相关阅读:
    8.02_python_lx_day14
    8.02_python_lx_day13<2>
    8.02_python_lx_day13<1>
    7.30_python_lx_day20
    7.29_python_lx_da19
    7.29_python_lx_day12
    Docker镜像
    Docker学习Ⅱ
    Docker学习Ⅰ
    2-3树的插入和删除原理
  • 原文地址:https://www.cnblogs.com/joeaaron007/p/4250555.html
Copyright © 2011-2022 走看看