一 指针数据类型
int i:定义整型变量i
int *p:p为指向整形数据的指针变量
int a[n]:定义含有n个整型元素的数组a
int *p[n]:定义指针数组p,它由n个指向整型数据的指针元素组成
int (*P)[n]:p为指向含有n个元素的一维数组的指针变量
int f():f为返回整型函数值的函数
int *p():p为返回一个整型指针的函数
int (*P)():P为指向函数的指针,该函数返回一个整型值
int **p:p是一个指向整型指针的指针变量,即指针的指针
struct exp_struct *p:p是一个指向exp_struct类型结构体的指针
二 指针运算
1 指针变量加减一个整数
p++ p-- p+i p-i p+=i p-=i
2 指针变量赋值
p=&a 将变量a的地址赋给p,即指针p指向变量a,*p=a
P=array 将数组array的首地址付给p,即p=&array[0]
p=&array[i] 将数组array的第i个元素的地址付给p,即*p=array[i]
int (*p)(int ,int) ;p=max:将函数max的入口地址赋给p,以后用到max(x,y)时可以用p(x,y)代替
p1=p2:p1和p2同为指针变量,将p2的值付给p1
3指针数组的初始化
char *p[]={"mon","tue","wed","thu","fri","sat","sun"};
Note:
(1)不能将一个整数付给指针变量p
如:p=1000,即将地址1000付给p,但实际做不到。只能将变量已分配的地址付给指针变量
(2)不能把指针变量p的值(它是一个地址)付给任何整型变量i
如:p=i
(3)指针变量可以有空值,即p=NULL
(4)两个变量可以相减,但相加没有实际意义
如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数
(5)两个指针变量的比较
若两个指针指向同一个数组的元素则可进行比较,指向前面的元素的指针变量小于指向后面的指针变量
(6)sizeof(p)得到的是指针p的指针类型的长度4(任何一个指针类型的长度都是4)
strlen(p)得到的是指针p指向的字符串的长度(不包含'\0')
如:char *p="abcdefg";这里p是一个指向字符串的静态指针,初始化以后就不能对其内容进行修改,即不能p[2]='x'这样修改内容
n=sizeof(p);//n=4
m=strlen(p);//n=7
int main() { char str[]="abcd efg hi"; char *p="wanghaittao"; int n,m,s,t; n=sizeof(p); m=strlen(p); s=sizeof(str); t=strlen(str); printf("sizeof(p):%d\n",n); printf("strlen(p):%d\n",m); printf("sizeof(str):%d\n",s); printf("strlen(str):%d\n",t); printf("****************************\n"); printf("*p:%s\n",p); printf("str[]:%s\n",str); printf("str[i]\t16_mod\tchar_mod\n"); int i; for(i =0;i<12;i++) printf("str[%d]\t%x\t%c\n",i,str[i],str[i]); printf("str[]:%s\n",str); exit(0); }
|
显示结果:
sizeof(p):4//指针长度 strlen(p):11//指针所指的字符串长度 sizeof(str):12 strlen(str):11 ****************************//注意空格在数组中的存储 *p:wanghaittao str[]:abcd efg hi str[i] 16_mod char_mod str[0] 61 a str[1] 62 b str[2] 63 c str[3] 64 d str[4] 20 str[5] 65 e str[6] 66 f str[7] 67 g str[8] 20 str[9] 68 h str[10] 69 i str[11] 0 str[]:abcd efg hi
|
阅读(2028) | 评论(0) | 转发(0) |