好友
阅读权限 35
听众
最后登录 1970-1-1
本帖最后由 SupKevin 于 2017-4-4 17:16 编辑
指针和一维数组
温习了一下以前的知识,对于数组a[5] 来说,&a[0] 和阿a 是等价的,也就是说a保存的是a[0]的地址。即 &a[0]==a./ / 一维数组名是个指针常量, 例如:int a【3】,int b【4】
a = b ;这时就便是错误的,因为a是常量,是不能把一个值来赋值给一个常量的。
看下面的一个例子:
如果在指针和一维数组中,如果想通过一个函数来输出一个数组的内容;函数要用两个参数才可以实现。
#include <stdio.h>
int main(void)
{
void f(int * pArr, int len);
int a[4] = {1,2,3,4};
int b[5] = {5,6,7,7,8};
int c[6] = {1,2};
f(a,4);
f(b,5);
f(c,6);
return0;
}
void f(int * pArr, int len)
{
int i;
for(i = 0;i < len; i++)
{
printf("%d",*(pArr+i));
}
printf("\n");
}
void f(int * pArr, int len);//定义指针变量 ,所说的需要两个参数,一个参数就是数组元素的首位元素a【0】,但是仅仅是知道数组元素的首元素还是不够的 ,还必须知道数组的长度,不然无法实现此函数的功。
因为在数组a中a代表的是a【0】元素的地址,所以在函数调用的时候格式为 f(a,4)
‘4’ 代表的是数组的长度!
* ( pArr+i )等价于 pArr 【 i 】也等价于 a 【 i 】也等价于 * ( a+i )
也就是说上个例子中 printf("%d ",*(pArr+i));中的*(pArr+i)可以被替换。此时就和数组的编号扯上了点关系;
*p(Parr)==a【0】// 此时 i=0 ;也就是说 parr = a =&a 【 0 】
*p(parr+1)== a【1】
依次来推出:
* ( pArr+i )等价于 pArr 【 i 】也等价于 a 【 i 】也等价于 * ( a+i )
应用:
此时我们就可以通过函数来改变数组中的任意一个元素的值;
2017/3/12
指针的运算
如果两个指针变量指向的是同一块连续空间的不同储存单元,则这两个指针变量才可以相减,数组便是其中的一种
例如:
Int a[10];
Int * p;
Int * q
P = &a【1】
Q = &a【4】
printf(“则p,q相隔了%d个单元”);// 输出结果是相差了 3 个单元。
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。