1.一维数组与指针
形如:int型 数组 a[10]
1)&a[0] 地址常量;地址类型:int *型 ; 存储数组a的首地址
2) a 地址常量;地址类型:int *型 ; 存储数组a的首地址 即 a与 &a[0]等价
形如:指向一维数组的指针变量
如有定义: int a[10],*p;
①p = &a[6]; //表示将a[6]的地址赋给指针变量p
②p = a
p = &a[0] //均表示将数组a的地址(or a[0]的地址)赋给指针变量p
形如:指针可进行的运算
预先定义:指针变量p,数组a[10],正整数n;
1)指针 ± 数值 【实际值:p±n*size | 其中size指p的基类型所占用的存储字节数】
形如:int型 数组 a[10]
1)&a[0] 地址常量;地址类型:int *型 ; 存储数组a的首地址
2) a 地址常量;地址类型:int *型 ; 存储数组a的首地址 即 a与 &a[0]等价
形如:指向一维数组的指针变量
如有定义: int a[10],*p;
①p = &a[6]; //表示将a[6]的地址赋给指针变量p
②p = a
p = &a[0] //均表示将数组a的地址(or a[0]的地址)赋给指针变量p
形如:指针可进行的运算
预先定义:指针变量p,数组a[10],正整数n;
1)指针 ± 数值 【实际值:p±n*size | 其中size指p的基类型所占用的存储字节数】
p + n :指向a[i]后面的第n个元素;
p - n : 指向a[i]前面的第n个元素;
※若定义:*p = a;
则:
*(a+i) 或者 a[i]
*(p+i) 或者 p[i] //四者意义:访问数组a中的第i个元素
本质与区别:
1.p与a数据类型均为int *型;
2.p是指针变量;a是指针常量(指向不可改变)
2)指针 -指针
前提:指向相同类型的指针变量可以相减
结果:两指针所指向的地址之间数据的个数(单位:数据类型,并非字节数)
Eg:
int *px,*py,n,a[5];
px = &a[1];
py = &a[4];
n = py - px; //结果:n = 3
n = px - py; //结果: n = -3
3)指针的比较运算(<,>,==,!=,<=,>=)
p - n : 指向a[i]前面的第n个元素;
※若定义:*p = a;
则:
*(a+i) 或者 a[i]
*(p+i) 或者 p[i] //四者意义:访问数组a中的第i个元素
本质与区别:
1.p与a数据类型均为int *型;
2.p是指针变量;a是指针常量(指向不可改变)
2)指针 -指针
前提:指向相同类型的指针变量可以相减
结果:两指针所指向的地址之间数据的个数(单位:数据类型,并非字节数)
Eg:
int *px,*py,n,a[5];
px = &a[1];
py = &a[4];
n = py - px; //结果:n = 3
n = px - py; //结果: n = -3
3)指针的比较运算(<,>,==,!=,<=,>=)
实质:比较两个地址值的大小。
结果:1 or 0
Eg:px == py //两地址相同?0:1
px < py //px<py?0:1
px==NULL //px为空指针?0:1
即 真为0;假为1
--------------------------------------------------------------------------------------------------------
元素的地址: 元素的值:
a+i 数组名法 *(a+i) 数组名法
p+i 指针法 *(p+i) 指针法
&a[i] 下标法 a[i] 下标法
&p[i]下标法 p[i] 下标法
---------------------------------------------------------------------------------------------------------
典型例子1:分别求数组前十个元素和后十个元素之和
#include<iostream>
int fsum(int *array,int n) { //通用的求和函数
int i,s = 0;
for(i = 0;i<n;i++)
s += array[i]
return (s);
}
void main(void){
int a[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int shead ,stail;
shead = fsum(&a[0],10); //or fsum(a,10)
stail = fsum(&a[5],10) ; //or fsum(a+5,10)
结果:1 or 0
Eg:px == py //两地址相同?0:1
px < py //px<py?0:1
px==NULL //px为空指针?0:1
即 真为0;假为1
--------------------------------------------------------------------------------------------------------
元素的地址: 元素的值:
a+i 数组名法 *(a+i) 数组名法
p+i 指针法 *(p+i) 指针法
&a[i] 下标法 a[i] 下标法
&p[i]下标法 p[i] 下标法
---------------------------------------------------------------------------------------------------------
典型例子1:分别求数组前十个元素和后十个元素之和
#include<iostream>
int fsum(int *array,int n) { //通用的求和函数
int i,s = 0;
for(i = 0;i<n;i++)
s += array[i]
return (s);
}
void main(void){
int a[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int shead ,stail;
shead = fsum(&a[0],10); //or fsum(a,10)
stail = fsum(&a[5],10) ; //or fsum(a+5,10)
}
---------------------------------------------------------------------------------------------------------
典型例子2:比较两字符串的大小:
int my_strcmp(char *s,char *p){
for(;*s==*p;s++;p++)
if(*s=='\0') reutrn (0); //如果都比较到最后一个字符了,那么二者相等
---------------------------------------------------------------------------------------------------------
典型例子2:比较两字符串的大小:
int my_strcmp(char *s,char *p){
for(;*s==*p;s++;p++)
if(*s=='\0') reutrn (0); //如果都比较到最后一个字符了,那么二者相等
return (*s-*t)>0?1:-1;
}
}