-
-
[原创]深入理解C语言四-指针的运算
-
发表于: 2021-7-25 16:39 5148
-
指针支持加减运算,不支持其他算术运算。对于指针p,指针的加法运算p+n,p向后移动的距离不是n个字节,而是n个指针所指数据类型的单位长度,减法运算与此类似。
1、是什么类型的指针参与运算
2、指针怎么运算
3、运算后得到什么
int
array[
3
][
4
]
=
{{
0x10
,
0x20
,
0x30
,
0x00
},
{
0x40
,
0x50
,
0x60
,
0x00
},
{
0x70
,
0x80
,
0x90
,
0x00
}};
int
(
*
p)[
4
]
=
array;
printf(
"%p\n"
, p);
/
/
p是
int
[
4
]类型的数组指针
printf(
"%p\n"
,
*
p);
/
/
p是
int
[
4
]类型的数组指针,
*
p得到
int
[
4
]的标志符引用,
*
p是
int
类型的指针常量
printf(
"%0x\n"
,
*
*
p);
/
/
*
p是
int
类型的指针常量,
*
*
p得到
int
类型指针常量的标志符引用,
*
*
p是
int
类型
printf(
"\n"
);
printf(
"%p\r\n"
, p
+
1
);
/
/
p是
int
[
4
]类型的数组指针,(
int
)(p
+
sizeof(
int
[
4
])
*
1
)
printf(
"%p\r\n"
, (p
+
1
)
+
1
);
/
/
(p
+
1
)是
int
[
4
]类型的数组指针,(
int
)((p
+
1
)
+
sizeof(
int
[
4
])
*
1
)
printf(
"%p\n"
,
*
(p
+
1
));
/
/
p
+
1
是
int
[
4
]类型的数组指针,
*
(p
+
1
)得到
int
[
4
]的标志符引用,
*
(p
+
1
)是
int
类型的指针常量
printf(
"%p\n"
,
*
(p
+
1
)
+
1
);
/
/
*
(p
+
1
)是
int
类型的指针常量,(
int
)(
*
(p
+
1
)
+
sizeof(
int
)
*
1
)
printf(
"\n"
);
printf(
"%p\r\n"
,
*
p
+
1
);
/
/
*
p是
int
类型的指针常量,(
int
)(
*
p
+
sizeof(
int
)
*
1
)
printf(
"%0x\n"
,
*
(
*
p
+
1
));
/
/
*
p
+
1
是
int
类型的指针常量,
*
(
*
p
+
1
)得到
int
类型指针常量的标志符引用,
*
(
*
p
+
1
)是
int
类型
printf(
"%0x\r\n"
,
*
(
*
p
+
1
)
+
1
);
/
/
(
*
p
+
1
)是
int
类型的指针常量,
*
(
*
p
+
1
)得到
int
类型指针常量的标志符引用,
*
(
*
p
+
1
)是
int
类型
printf(
"\n"
);
printf(
"%p\r\n"
, p[
1
]);
/
/
p[
1
]
=
=
*
(p
+
1
),p[
1
]是
int
类型的指针常量
printf(
"%p\r\n"
, p[
1
]
+
1
);
/
/
p[
1
]
+
1
=
=
*
(p
+
1
)
+
1
,
*
p[
1
]
+
1
是
int
类型的指针常量
printf(
"%0x\r\n"
, p[
1
][
1
]);
/
/
p[
1
][
1
]
=
=
*
(
*
(p
+
1
)
+
1
),p[
1
][
1
]是
int
类型
printf(
"%0x\n"
, (p[
1
]
+
1
)[
1
]);
/
/
p[
1
]
=
=
*
(p
+
1
),
*
(p
+
1
)是
int
类型的指针常量,
/
/
(p[
1
]
+
1
)[
1
]
=
=
*
(
*
(p
+
1
)
+
1
+
1
) ,
*
(p
+
1
)是
int
类型的指针常量,
*
((
int
)(
*
(p
+
1
)
+
sizeof(
int
)
*
1
+
sizeof(
int
)
*
1
))
/
/
*
(
*
(p
+
1
)
+
1
+
1
)是
int
类型,(p[
1
]
+
1
)[
1
]是
int
类型
printf(
"%0x\r\n"
,
*
p[
1
]
+
1
);
/
/
*
p[
1
]
+
1
=
=
*
(
*
(p
+
1
))
+
1
,
*
(p
+
1
)是
int
类型的指针常量,
*
(
*
(p
+
1
))是
int
类型
int
array[
3
][
4
]
=
{{
0x10
,
0x20
,
0x30
,
0x00
},
{
0x40
,
0x50
,
0x60
,
0x00
},
{
0x70
,
0x80
,
0x90
,
0x00
}};
int
(
*
p)[
4
]
=
array;
printf(
"%p\n"
, p);
/
/
p是
int
[
4
]类型的数组指针
printf(
"%p\n"
,
*
p);
/
/
p是
int
[
4
]类型的数组指针,
*
p得到
int
[
4
]的标志符引用,
*
p是
int
类型的指针常量
printf(
"%0x\n"
,
*
*
p);
/
/
*
p是
int
类型的指针常量,
*
*
p得到
int
类型指针常量的标志符引用,
*
*
p是
int
类型
printf(
"\n"
);
printf(
"%p\r\n"
, p
+
1
);
/
/
p是
int
[
4
]类型的数组指针,(
int
)(p
+
sizeof(
int
[
4
])
*
1
)
printf(
"%p\r\n"
, (p
+
1
)
+
1
);
/
/
(p
+
1
)是
int
[
4
]类型的数组指针,(
int
)((p
+
1
)
+
sizeof(
int
[
4
])
*
1
)
printf(
"%p\n"
,
*
(p
+
1
));
/
/
p
+
1
是
int
[
4
]类型的数组指针,
*
(p
+
1
)得到
int
[
4
]的标志符引用,
*
(p
+
1
)是
int
类型的指针常量
printf(
"%p\n"
,
*
(p
+
1
)
+
1
);
/
/
*
(p
+
1
)是
int
类型的指针常量,(
int
)(
*
(p
+
1
)
+
sizeof(
int
)
*
1
)
赞赏
他的文章
- [分享]C++基础十七-异常机制 8580
- [分享]C++基础十六-模板 8941
- [分享]C++基础十五-运算符重载 8964
- [分享]C++基础十四-抽象类 8677
- [分享]C++基础十三-多态 8477
看原图
赞赏
雪币:
留言: