c语言运算符 *,C语言运算符:关于 * 和 ++ 的问题

宏定义

#define Max(X, Y) ((X) > (Y) ? (X) : (Y))

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

//当将数组名作为参数传递给形参时,实参只需要用数组名就可以,因为数组名就代表该数组的首地址,

//形参可以定义成*,也可以定义成[]的形式,定义成[]表示变量是数组类型。

int array[5] = {11, 22, 33, 44, 55};

// 当将数组的一个元素作为参数传递给形参时,实参需要加&,表示取其地址,

// 而形参加*(取值运算符),意思是定义一个指向数组元素的指针,用来指向形参的地址。// (* + 指针表达式)

int *p = &array[0];

NSLog(@"p===%p, *p===%d, &array[0]===%p", p, *p, &array[0]);

//1. *p++

// a = *p++; 等价于:a = *p; p++; //是先取出p指向的值给a,然后对指针p加1。

int max = Max(*p++, 1);

NSLog(@"max===%d, p===%p, *p===%d", max, p, *p); // max===22, p指针改变, *p===33

// (*p++) > (1) ? (*p++) : (1) ===> (11) > (1) ? (*p++) : (1) ===> (11) > (1) ? (22) : (1) ===> (22)

// 数组变成 int array[5] = {11, 22, 33, 44, 55};

//2. *++p

// a = *++p; 等价于:++p; a = *p; //这里的 ++p 都是指针的改

// int max = Max(*++p, 1);

// NSLog(@"max===%d, p===%p, *p===%d", max, p, *p); // max===33, p指针改变, *p===33

// (*++p) > (1) ? (*++p) : (1) ===> (22) > (1) ? (*++p) : (1) ===> (22) > (1) ? (33) : (1) ===> (33)

// 数组变成 int array[5] = {11, 22, 33, 44, 55};

//3. ++*p

// a = ++*p;等价于 *p; a = ++(*p);

// int max = Max(++*p, 1);

// NSLog(@"max===%d, p===%p, *p===%d", max, p, *p); // max===13, p指针不改变, *p===13

// (++*p) > (1) ? (++*p) : (1) ===> (12) > (1) ? (++*p) : (1) ===> (12) > (1) ? (13) : (1) ===> (13)

// 数组变成 int array[5] = {13, 22, 33, 44, 55};

//4. (*p)++

// a = (*p)++;等价于 a = *p; (*p)++;

// int max = Max((*p)++, 1);

// NSLog(@"max===%d, p===%p, *p===%d", max, p, *p); // max===12, p指针不改变, *p===13

// ((*p)++) > (1) ? ((*p)++) : (1) ===> (11) > (1) ? ((*p)++) : (1) ===> (11) > (1) ? (12) : (1) ===> (12)

// 数组变成 int array[5] = {13, 22, 33, 44, 55};

//5. *(p++) 等价于 *p++

// a = *(p++); 等价于 a = *p; p++;

// int max = Max(*(p++), 1);

// NSLog(@"max===%d, p===%p, *p===%d", max, p, *p); // max===22, p指针改变, *p===33

// (*(p++) > (1) ? (*(p++) : (1) ===> (11) > (1) ? (*(p++) : (1) ===> (11) > (1) ? (22) : (1) ===> (22)

// 数组变成 int array[5] = {11, 22, 33, 44, 55};

// a++ 和 ++a 的区别

int a = 120;

printf("%d, ", a++);

// 120 (先输出a=120;后做a=a+1;实际内存中a=121)

printf("%d", ++a);

// 122 (先做a=a+1;后输出a=122;实际内存中a=122)

}

以下内容来源于:百度百科

优先级

运算符

名称或含义

使用形式

结合方向

说明

2

++

自增运算符

++变量名/变量名++

右到左

单目运算符

2

--

自减运算符

--变量名/变量名--

右到左

单目运算符

2

*

取值运算符

*指针表达式

右到左

单目运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值