zoukankan      html  css  js  c++  java
  • 谭浩强C指针(二)

    第一次看指针,看过两遍,整个一章节还是有些头大,先作整理:

    一、变量的指针和指向变量的指针变量

    1、变量的指针即是存储变量的内存地址;

    2、存放变量地址的变量称为指针变量;

    3、指针变量的定义:类型说明符 *指针变量名称

    例:int *a;  //声明一个指针变量a,a存放的值为地址,该地址指向一个整型变量。

    4、指针变量的引用:

    (1)相关的运算符:

    1)&:取地址运算符:作用对象为变量;

    2)*:指针运算符:作用对象为指针变量。

    (1)指针变量初始化:

    int a;

    int *p=&a;

    (2)赋值语句:

    Int a,*p;  //这里的*是指针变量说明符,与指针运算符含义不同

    P=&a;

    5、指针变量作为函数的参数

    指针变量也是一种变量,自然可以作为函数参数,实际意义是将实际指针参数的值(即地址)赋值给调用函数的形式参数。

    6、指针变量的其他运算:

    (1)对指针变量的加减运算

    int a[5],*pa;

    pa=a;

    pa=pa+2;//指向第三个元素,即a[2]

    //指针变量的加减运算只能对数组指针变量进行(对其他无意义)

    (2)两个指针变量之间的运算:只有指向同一数组的指针变量之间才是有意义的。

    二、数组指针和指向数组的指针变量

    1、数组指针的定义:指向数组的指针。定义如下:

    int a[5];

    int *p;      //因要指向的数组元素为整型数据,所以该指针变量也说明为int

    p=&a[0];   //初始化,指向数组a,等同于p=a;

    2、通过数组指针对数组元素进行引用:

    如上例中,则可以用以下方式表示第二个数组元素:*(p+1),也可以用数组名:*(a+1),因为数组名a实质上是一个常量,表示的是数组首地址。但须注意a和p的区别:a是常量,p是指针型变量。所以p++是可以的,而a++是错误的。

    3、当数组名作为函数参数时,传递的实质也是地址。

    4、指向多维数组的指针和指针变量

    (1)对于int a[3][4]={{0,1,2,3,},{4,5,6,7},{8,9,10,11}}这个二维数组,可分解为a[0]、a[1]、a[2]三个一维数组(a[0]={0,1,2,3},a[1]=…);对于a[0]数组,包含a[0][0],a[0][1],a[0][2]三个元素.

    通过二维数组名对数组元素地址的引用:

    1)a[0]表示该数组名和首地址,即a[0][0]的地址,也是整个二维数组的首地址。a,&a[0][0],a[0]均表示首地址,此外,*(a+i)和&a[i]也可以表示二维数组中第i行的首地址,因此*(a+0)即*a和&a[0]也表示二维数组首地址。其他行的首地址可以类推。//注意,该段中a是二维数组名。

    2)i行j列元素的地址:

    直接用&a[i][j],或*(a+i)+j,或 a[i]+j;

    (2)指向二维数组的指针变量

    定义格式:类型标示符 (*指针变量名)[二维数组的列数]。

    以(1)中二维数组a为例,定义一个指向a的指针变量如下:

    int  (*pa)[4];  //a中元素为整型,a有4列

    通过指针变量对二维数组元素地址的引用:

    第i行第j列元素地址:*(p+i)+j; 

    三、函数指针变量

    1、定义:

    类型说明符 (*指针变量名)();//类型说明符表示该指针变量指向的函数返回值类型

    2、作用:指向函数入口地址以调用函数 

    四、指针型函数

    指针型函数返回的是指针值。

    int *ap(int x,int y)   //int表示该函数返回的指针指向的是一个整型数据

    {…}   //函数体 

    五、指针数组和指向指针的指针

    1、指针数组表示数组元素为指针。各数组元素必须具有相同存储类型和指向相同数据类型。

    2、指针数组的表示:类型说明符 *数组名[数组长度]。如 int *p[3]表示p是一个指针数组,有3个数组元素,存储的指针均指向整型数据。

    3、指向指针的指针变量:如:int **p;表示指针变量p,其指向的依旧是一个指针变量:*p。

  • 相关阅读:
    转载集合
    TYVJ P1053 字符串的展开 Label:字符 水
    划分数系列问题
    关于inf的问题
    TYVJ P1031 热浪 Label:dijkstra 最短路
    TYVJ P1032 零用钱 Label:贪心
    如何简单形象又有趣地讲解神经网络是什么?知乎
    CString
    利用afxDump来调试自己的程序
    mfc 调试 弹消息
  • 原文地址:https://www.cnblogs.com/tsembrace/p/3120167.html
Copyright © 2011-2022 走看看