C语言指针和数组
指针和地址
指针是编程语言中的一类数据类型及其对象或变量,用来表示或存储一个内存地址,这个地址的值直接指向(points to)存在该地址的对象的值。
取值运算*p
返回保存在内存地址为p的内存空间中的值。取地址&p
运算则返回操作数p的内存地址
C语言是以传值的方式将参数值传递给被调用函数,被调用函数不能直接修改主调函数中的值,需要修改主调函数中的值就需要利用指针
指针和数组
数组名代表的是该数组的第一个元素的地址,对于
a[i]
的引用可以写成*(a+i)
或者*(pin + i)
或者pin[i]
,通过数组名和下标实现的表达式可等价通过指针和偏移量实现
int a[10];
int *pin;
pin = &a[0];
pin = a;
pin = pin + 1;
pin = &a[1];
pin = a + 1;
不同的是数组名和指针之间,数组名代表的是一个常量,相反指针代表的是一个变量,因此
pin = a
和pin++
是合法的,而a = pa
和a++
是错误的
地址算术运算
指针可以进行比较运算:指向同一个数组的指针可以进行
==
<=
>=
!=
等
同样指针可以进行与整数相加或相减运算,如p+n
其中n
的长度不是固定的,会随着指针等比例的缩放,减法也是相同的
指向同个数组的两个指针可以相减或者比较运算如p-q+1
代表两指针之间的元素个数
指针不可进行上述以外的其他运算,如两指针之间的相加运算、乘除运算等,同double或者float之间的加减运算,以及强制转换运算
字符指针和函数
字符串常量就是一个字符数组:"I am a string"
,在内部表示中字符和