C/C++ 您当前所在位置:首页 > C/C++ > C语言指针探测(二)

C语言指针探测(二)

陈成 陈成 2020-07-14 20:23:36 C/C++ 176人已围观

简介 指针在C中是一个至高点,如果指针没学好,那么C就相当于白学。我这里将学习笔记记录下来,一步一步了解指针到底是个什么东西,如何使用。

加上或减去一个整数

int main(int argc, char* argv[])
{
    char* a;
    short* b;
    int* c;
    a = (char*)10;
    b = (short*)10;
    c = (int*)10;
    a = a + 5;
    b = b + 5;
    c = c + 5;
    printf("%d %d %d", a, b, c);
    return 0;
}

上面我分别加上了5,打印出来的结果15,20,30。这个和C语言指针探测(一)中的加加或减减本质一样,将类型去掉一个“*”,然后用去掉“*”的类型宽度乘以5,这才是真正要加的数量。

求差值

两个带“*”的类型是可以直接相减的,但有前提,必须两个类型完全一样,“*”前面的类型不同不能减,“*”的数量不一样也不能减。看下面的例子。

int main(int argc, char* argv[])
{
    char* a = (char*)200;
    char* b = (char*)100;
    int c = a - b;
    return 0;
}

上面a和b类型完全一样,没有问题。像下面这样就不行。

int main(int argc, char* argv[])
{
    char* a = (char*)200;
    char** b = (char*)100;
    int c = a - b;
    return 0;
}

下面这样也不行。必须完全一样。

int main(int argc, char* argv[])
{
    char* a = (char*)200;
    short* b = (char*)100;
    int c = a - b;
    return 0;
}

那相同类型相减后结果是如何计算的呢。

int main(int argc, char* argv[])
{
    char* a = (char*)200;
    char* b = (char*)100;
    int c = a - b;
    return 0;
}

上面的结果是100。但如果将char*类型改成char**,结果就是25,是用200-100的结果再除以将类型去掉一个“*”后的宽度4,就是这么来的。

注意相减的结果类型并不是原来的类型,而是变成了int。

做比较

带“*”类型还可以做比较。

int main(int argc, char* argv[])
{
    char* a = (char*)200;
    char* b = (char*)100;
    if (a > b)
    {
        printf(">");
    } else {
        printf("<");
    }
    return 0;
}

结果输出“>”。

文章评论

发送

站点信息

  • 上线时间:2020年05月30日
  • 网站程序:自建框架
  • 博客模板:今夕何夕
  • 文章统计43篇文章
  • 评论统计0条评论
  • 留言统计0条留言
  • 统计数据:百度统计