美文网首页
2019-05-22 常量与指针,数组与指针

2019-05-22 常量与指针,数组与指针

作者: 知成 | 来源:发表于2019-05-22 18:52 被阅读0次

常量与指针,数组与指针


常量与指针

常量与指针的关系很容易弄混,为此我专门在此记录一下。

常量指针

  • 指向常量的指针,用const修饰的指针所指向的地址内容不可以改变。
int value = 500;
const int *temp = &value;

如上述代码所示,不能用指针temp去修改value的值,前面的const是为了确保value的值不被temp修改而存在的。(经常会用在函数的形参需要传入指针时,并且不希望形参被修改,而使用const修饰)
···
虽然上述代码中temp不可以用来改变value的值,但是它的指向是可以改变的,如下所示。

#include<stdio.h>

int main()
{
    int value1 = 200;
    int value2 = 300;
    const int *temp;
    //先使temp指向value1
    temp = &value1;
    printf("# %d\n", *temp);

    //再使temp指向value2
    temp = &value2;
    printf("# %d\n", *temp);
    getchar();
    return 0;
}
  • 程序执行结果如下:

# 200
# 300

指针常量

  • 特指指针所指的地址不可变(但可通过此指针去修改所指地址的内容)具体表达形式如下。
int value = 200;
int num = 300;
int *const pcount = &value;
//pconut = &num;    //错误操作

上述代码中pcount指向value后将不可以再指向别的地址。

#include<stdio.h>

int main()
{
    int value1 = 200;
    int value2 = 300;
    //temp1指向value1
    int *const temp1 = &value1;
    printf("# %d\n", value1);

    //用temp1修改value1
    *temp1 = value2;
    printf("# %d\n", value1);
    getchar();
    return 0;
}
  • 程序执行结果:

# 200
# 300

数组与指针

指针与数组的结合中“指针数组”与“数组指针”容易使人混论,原因之一是名字比较绕,另外它们的书写形式也很象。在理解这个问题上,我觉得从符号的优先级上去理解比较容易区分。

指针数组

int *p[3]; 

如上所示,“[]”的优先级高于“*”,因此可以理解为 3 个 int*,类型的数据,对应的二维数组应该是 int temp[3][] = {};

  • 具体应用如下:
#include<iostream>

int main()
{
    int *p[3];
    int temp[3][3] = {
        {0,1,2},
        {3,8,7},
        {6,9,4}
    };
    for (int i = 0; i < 3;++i)
    {
        p[i] = temp[i];
    }

    //用指针数组打印temp数组的数据
    for (int i = 0;i < 3;++i)
    {
        for (int j = 0;j < 3;++j)
        {
            std::cout << temp[i][j] << " ";
        }
    }

    getchar();
    return 0;
}
  • 程序执行结果如下:

0 1 2 3 8 7 6 9 4

数组指针

int (*p)[3];

如上所示,“()”的优先级高于“[]”,因此可以理解为指针p指向了int类型且大小为3的一维数组的首地址。

数组指针与二维数组

int *p[3];
//可将上述的数组指针理解为 int p[][3] = {};
  • 具体例子如下:
#include<iostream>

int main()
{
    int (*p)[3];
    int temp[3][3] = {
        {0,1,2},
        {3,8,7},
        {6,9,4}
    };
    p = temp;

    //用指针数组打印temp数组的数据
    for (int i = 0;i < 3;++i)
    {
                // p+1 相当于加3个int类型的长度
        std::cout << (*(p + i))[0] << " " << (*(p + i))[1] << " " << (*(p + i))[2] << std::endl;
    }

    getchar();
    return 0;
}
  • 执行结果如下:

0 1 2
3 8 7
6 9 4

相关文章

  • 2019-05-22 常量与指针,数组与指针

    常量与指针,数组与指针 常量与指针 常量与指针的关系很容易弄混,为此我专门在此记录一下。 常量指针 指向常量的指针...

  • 指针与数组(1)

    本章主要整理归纳数组与指针、指针常量、常量指针的概念 C中,令人最为不解的应该就是指针的概念了,而数组与指针混在一...

  • 混淆知识点

    1、指针数组&数组指针、常量指针&指针常量、函数指针&指针函数 数组指针&指针数组 数组指针的定义 int (*p...

  • C:函数指针的坑

    关于该死的函数指针和指针函数 先来个目录 常量指针、指针常量 数组指针、指针数组 函数指针、指针函数 1、先看第一...

  • 计算机基础的考察

    语言语法(以C/C++为例)。 指针(数组),函数指针,操作符运算顺序,const(常指针与指向常量指针),sta...

  • const 相关

    1.常量指针与指针常量 常量指针是针对于普通指针而言,语义在于指向常量的指针;定义: const *...

  • C语言的数组指针与指针数组(One)

    一、数组指针与指针数组: 数组指针<——>本质是指针 指针数组<——>本质是数组上图: 二、数组指针: int ...

  • 指针常量与常量指针

    指针常量 指针不可变 指针指向的值可 const右边部分不可变.常量指针 ...

  • 指针常量与常量指针

    这里有一篇关于利用顺时针解读的文字,按照这个方法理解了以后,再去区分指针常量与常量指针的定义应该不难。 http:...

  • C语言特性(指针数组和指向指针变量的指针)

    指针数组和指向指针变量的指针 指针数组与main()函数形参 声明指针数组与声明普通数组的语法类似,其语法格式如下...

网友评论

      本文标题:2019-05-22 常量与指针,数组与指针

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