void fun1_les7() {
int a[5];
a[3] = 50;
int* p;
p = a;
printf("%d
", p[3]);
}
c语言规定,数组的名字就是数组的首地址,即第0个元素的地址;是个常量;
p是指针变量,a是常量,a可以赋值给p,p不能赋值给a;
*(p + 2) = 100;
printf("%d
", a[2]);
p是数组第0个元素的地址,p+2就是a[2]的元素的地址;
*(a + 1) = 150;
printf("%d
", a[1]);
指针运算
指针运算只有在指针指向数组元素的时候才有意义
数组名+索引取数组值
printf("%p
", p);
printf("%p
", p+2); //相差8个字节
char str[5];
char* p1;
p1 = str;
printf("%p
", p1);
printf("%p
", p1 + 2); //相差2个字节
指针+1,指针往后移动一个对应类型的变量,地址编号加几个数取决于指针的类型,整型加4个字节,字符型加1个字节;
只有两个一样类型的指针,指向同一个数组的时候,指针的大小比较才有意义,同理他们之间的减法才有意义;
指向前面元素的指针小于指向后面元素的指针
指针相减的结果是中间隔了多少个元素
两个一样类型的指针可以相互赋值
void *类型除外
int b[10];
int *p3 = &b[4];
int* p4 = &b[8];
//int* p3, * p4;
//p3 = &b[4];
//p4 = &b[8];
printf("%d
", p4-p3);
指针数组
指针数组本身是个数组,是若干个一样类型的指针变量构成的数组
指针数组是个数组,数组里面的每个元素是一个指针
定义 :类型 * 变量名 [数组数量]
int * p[5];
int a=88;
p[1] = &a;
int b[10] = {1,2,3,4,5,6,7,8,9,10};
p[2] = &b[2];
printf("%d---%d
", *p[1], *p[2]);
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...