C语言学习2:指针与数组的细节

C语言学习2:指针与数组的细节

简介:本文为学习数组与指针时,对于相关概念和用法较易混淆,特记录下来以清晰概念,主要用作自己使用,故请原谅排版问题,谢谢。

1、运算符&:
①作用为取一个变量的地址
②输出地址时格式要使用%p
③强制将地址转为int时输出可能失真,取决于编译时32/64位架构
④&右边必须是一个单纯的变量,不能是a++之类

2、数组:
①&a a &a[0] 等价,都为数组(第一个单元)的地址。
②传入函数的数组是指针,大小为一个地址,指向那个数组。
③数组变量本身表达地址,int*p = a;
④ *a表示a[]的第一个单元
⑤数组变量是const类型的指针,故不能使用b = a赋值:int b[] -->int *const b
⑥int sum(const int a[] )可以保护数组不被破坏。

3、指针:
①指针是保存地址的变量,必须先初始化再使用:int *p=&i
②int与 * 靠近与否仅将后边相邻的变量定义为指针类型。
③函数参数为指针时,调用时使用 f (&i) 的形式,且在函数内部可以改变外部变量的值,适用于交换、需要输出多值、值通过参数指针返回状态通过return返回。
④p[0]=*p
⑤int *const q = &i 表示q的值不能改变,即q指向i的事实不能改变
而 const int * p 或者 int const * p表示不能通过这个指针去修改那个变量。
void f (const int * x)常用于参数类型比地址大,且能避免函数对变量进行修改(结构)
⑥两个指针相减后的结果为两地址之差除以sizeof
⑦常用 *p++做遍历

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章