C语言指针与数组的关系

数组是特殊的指针,及数组为type * const p类型,这也就解释了数组无法进行赋值即a=b是不合法的,因为数组的地址是不能改变的。反过来对于一个普通的指针int * p,p[0]是合法的,值为*p。借由以下两点可以加深对数组的理解和印象。
1、在函数里 void f(int *a)
void f(int a[])
void f(int [])
woid f(int )
是等价的
2、
(a+n)=a[n],两者完全等价,在函数里给a[n]赋值也会改变函数外a[n]的值,因为函数传过来的是数组的地址,通过地址就可以直接改变地址对应的值。
3、可以用指针完成数组的访问,切片等。
eg 对数组a,记录其a[i:j]
for (p=&a[i],k=0;k<j-i;k++){
*(p+j)
}
还可以在数组末尾加上一个数组其它元素中不可能出现的哨兵元素,靠它进行停止访问,如在正数数组末尾加上-1
4、动态分配数组内存
malloc:动态分配内存
int a;
a=(int )malloc(10sizeof(int));//以字节为单词
//malloc 是void
类型,需要做强制类型转换
//由于上述数组和指针的关系,我们可以把a当作数组用
free(a);//在用完之后再把a占用的内存释放掉

5、因为在函数中的数组只是输入了一个地址,因此我们无法通过sizeof(a)/sizeof(a[0])来得出a的长度,因为在函数中输入数组时通常会同步输入数组的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值