数组与指针 指针变量可以指向数组元素,所谓数 组元素的指针就是数组元素的地址。 引用数组元素可以用下标法来表示 (例如:aray10]),也可以用指针法, 即通过指向数组元素的指针找到所需要 的元素
数组与指针 指针变量可以指向数组元素,所谓数 组元素的指针就是数组元素的地址。 引用数组元素可以用下标法来表示 (例如:array[10]),也可以用指针法, 即通过指向数组元素的指针找到所需要 的元素
数组与指针 指向数组元素的指针 定义指向数组元素的指针变量和定义 个指向变量的指针变量方法相同 例子: int a 101 int p P=&a[0 这样就将指针变量P指向了数组a的第 个元素
数组与指针 • 指向数组元素的指针 定义指向数组元素的指针变量和定义 一个指向变量的指针变量方法相同 例子: int a[10]; int *p; P=&a[0]; 这样就将指针变量P指向了数组a的第 一个元素
数组与指针 注意: C语言规定数组名不代表整个数组, 而是代表该数组的首地址,因此以下两 个定义是等价的: Int米 a 2. int*p 0
数组与指针 • 注意: C语言规定数组名不代表整个数组, 而是代表该数组的首地址,因此以下两 个定义是等价的: 1.int *p=a; 2.int *p; p=a[0];
数组与指针 ·通过指针引用数组元素 假设P已定义为一个指向整形数据的指针变 量,并已经给它赋了一个整形数组元素的地 址,使它指向某一个数组元素 例如: int*p, a 101 p=&a0]; *p=13(引用整形指针) 其作用相当于将数组元素a[0赋值为1
数组与指针 • 通过指针引用数组元素 假设P已定义为一个指向整形数据的指针变 量,并已经给它赋了一个整形数组元素的地 址,使它指向某一个数组元素。 例如: int *p,a[10]; p=&a[0]; *p=1;(引用整形指针) 其作用相当于将数组元素a[0]赋值为1
数组与指针 关于指针引用数组元素的几点说明: 假设已经将指针变量p指向了数组a的a[O] 则pl和a+就是a的地址。 即:*(p+)=*(a+)=a[订 所以:引用数组元素的方法有四种 1.*(p+1) 2.*(a+i1) 指针法 3.p[i 4.*p;p+
数组与指针 • 关于指针引用数组元素的几点说明: 假设已经将指针变量p指向了数组a的a[0] 则p+I和a+I就是a[i]的地址。 即: *(p+I)=*(a+I)=a[i]; 所以:引用数组元素的方法有四种 1.*(p+i) 2.*(a+i) 3.p[i] 4.*p;p++ 指针法
数组与指针(程序一) #include #include maino int a51,p,i; p=&a[0];/p=a; ◆for(i=0;<5;计++) a[=i+1
数组与指针(程序一) #include #include main() { int a[5],*p,i; p=&a[0]; //p=a; for(i=0;i<5;i++) { a[i]= i+1; }
数组与指针(程序一) for(i=0;j<5;计+) printf("(p+d)=%dn", i, (p+i)) for(i=0;i<5;i++) printf("*(a+%d=%odn,i,(a+i)) for(p<(a+5);p+)
数组与指针(程序一) for(i=0;i<5;i++) { printf("*(p+%d)=%d\n",i,*(p+i)); } for(i=0;i<5;i++) { printf("*(a+%d)=%d\n",i,*(a+i)); } for(;p<(a+5);p++) {
数组与指针(程序一) printf("* p=%odn" * p) for(p=a,i=0<5;i++) printf("pl%od=%odn,i,pD; system("pause
数组与指针(程序一) printf("*p=%d\n",*p); } for(p=a,i=0;i<5;i++) { printf("p[%d]=%d\n",i,p[i]); } system("pause"); }
数组与指针 。对上述四种方法的比较: 1.*(p+i),*(a+i)p[三种方法的执行效率 是完全一样的,每次要重新计算地址 2用*p;p++;来引用数组元素的方法执 效率最高,因为不必每次重新计算地址 只需要有规律的改变地址值即可
数组与指针 • 对上述四种方法的比较: 1.*(p+i),*(a+i),p[i]三种方法的执行效率 是完全一样的,每次要重新计算地址 2.用*p;p++;来引用数组元素的方法执行 效率最高,因为不必每次重新计算地址, 只需要有规律的改变地址值即可
数组与指针 使用指针时,有几个问题要注意 1.可以改变指针变量的值,即可以执 行p++;操作,但不可以改变指针常量 的值,如数组名a就是指针常量,所以不 能用a++。 例如:inta[10]i; for(=0;I<10;I++) printf( d2*a++); 上述写法是错误的
数组与指针 • 使用指针时,有几个问题要注意 1.可以改变指针变量的值,即可以执 行p++;操作,但不可以改变指针常量 的值,如数组名a就是指针常量,所以不 能用a++。 例如:int a[10],i; for(I=0;I<10;I++) printf(“%d”,*a++); 上述写法是错误的