指针和数组:
#include<stdio.h> /* int main() { int i = 0; int ages[5]={10,9,8,67,56}; for(i = 0; i<5; i++){ printf("%d\n", ages[i]); } return 0; } */ //用指针访问每个数组元素 int main(){ int *p; int ages[5]={10,9,8,67,56}; p = &ages[0];//指针指向数组的首元素。//数组名就是数组的地址,也是数组首元素的地址 or p = ages // printf("%d\n", *p);这个时候说明指针指向了第一个元素地址,结果输出p指向元素的空间存储之就是0; // p+1,这个会跳到下一个元素的地址。 printf("%p\n", *p);//&ages[0] printf("%p\n", *p+1);//&ages[1] printf("%p\n", *p+2);//&ages[2] //取出第三个元素的值 // printf("%d\n",*(p+2)); //////////////////////////////////// //数组的另外一种表达方式: printf("%d\n",p[2]);//指针可以替代数组,p[2]就等于ages[2].因为前面p=ages[2]; /* 数组元素的访问方式: 1. 数组名【下标】 ages[1] 2. 指针变量名【下标】 p【1】 3, *(p+i) 如何判断p+1,地址加上了多少取决于变量类型: int main() { double d = 10.9; double *dp; dp = &d; printf("dp = %p\n", dp); printf("dp + 1 = %p\n, dp+1); } */ int i ; for(i = 0 ; i<5; i++) { printf("ages[%d]=%d;\n", i, *(p+i) ); } { double d = 10.9; double *dp; dp = &d; printf("dp = %p\n", dp); printf("dp + 1 = %p\n", dp+1); } return 0; }
指针和数组密不可分:
#include <stdio.h> void change(int array[]); int main() { int ages[5]={ 5,6,7,8,9 }; change(ages); return 0; } void change(int *array)//只能指向整型。 { printf("%d\n", array[2]);//这种写法和下面的一样,指针和数组密不可分 printf("%d\n", *(array+2));//*array只能指向第一个数组元素 } /* void change(int array[]) { int s = sizeof(array); printf("%d\n", s); } */
高级变化:指针里面带入函数,函数再变化。
#include <stdio.h> void change(int array[]); int main() { int ages[5]={ 1,2,3,4,5, }; change(&ages[2]);//第二个元素地址传给指针 return 0; } void change(int *array)//只能指向整型。 { printf("%d\n", array[2]);//=*(array+2) } //