美文网首页
一、指针、宏和++

一、指针、宏和++

作者: faterman | 来源:发表于2018-01-24 17:21 被阅读14次
题目:实现一个Max 宏,写出该程序的输出
int array[5] = {1, 2, 3, 4, 5};
int *p = &array[0]; // p是array首地址
int max = Max(*p++, 1);
printf("%d %d\n", max, *p); //1,2

讨论i++和++i

讨论i++和++i

Max宏的实现

#define Max(x,y)((x)>(y)?(x):(y))

主要的问题其实就是x,y可能是表达式,为了规避++i,i++的问题,括号加的全一点就成。

输出的解释

p指针指向了数组array的首地址,也就是第一个元素对应的地址,其值为1.
宏定义时一定要注意每个地方要加上圆括号
p++相当于p, p++,所以Max(p++, 1)相当于:
(
p++) > (1) ? (p++) : (1)
=>
(1) > (1) ? (
p++) : (1)
=>
第一个p++的结果是,p所指向的值变成了2,但是1 > 1为値,所以最终max的值就是1。而后面的(p++)也就不会执行,因此p所指向的地址对应的值就是2,而不是3.
扩展:如果上面的p++改成(++p)如何?
(++p) > (1) ? (++p) : (1)
=>
(2) > (1) ? (*++p) : (1)
=>
max = *++p;
=>
*p = 3,max = 3;

相关文章

  • 一、指针、宏和++

    讨论i++和++i 讨论i++和++i Max宏的实现 主要的问题其实就是x,y可能是表达式,为了规避++i,i+...

  • nil Nil NULL NSNull

    nil Nil NULL NSNull NULL是宏,是对于C语言指针使用的,表示空指针 nil是宏,是对于...

  • iOS nil、Nil、NULL和[NSNull null]

    NULL 是宏,是对于 C 语言指针而使用的,表示空指针nil 是宏,是对于 Objective-C 中的对象而使...

  • 关于list_for_each_entry相关函数

    offsetof宏 定义: 该宏先将0转换成TYPE型指针,即形成一个指向地址0的TYPE指针,然后对TYPE中的...

  • 2018/08/03

    指针数组一小部分,宏定义。

  • C语言中的 * 和 &

    宏定义 1. 值拷贝 值拷贝:虽然赋值相同,但地址不同。 2. 指针拷贝 指针拷贝:p1和p2虽然是同一个对象,但...

  • 王道程序员求职宝典(十)函数,栈与队列

    函数 参数传递值传递指针传递引用传递指针引用*& 内联函数成员函数内联普通函数内联宏定义 默认参数从右向左设定默认...

  • C语言 - 中

    总目录 前言 本文介绍C语言的指针:一、指针介绍二、指针使用三、数组指针和指针数组 函数指针和指针函数 环境 1...

  • 02_C++笔记_函数

    复习数组和指针的关系: 结果如下: 数组和指针作为参数传递: 进一步改进: const和指针, 指针指向指针: 函...

  • 10.19

    今天学习了预处理命令,宏定义,define,ifdef等,还初步了解了文件的部分,宏定义听起来比指针要直观的多,无...

网友评论

      本文标题:一、指针、宏和++

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