企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 16.关于指针的总结 指针的数据类型: | 定义 | 含义 | |---|---|---| | int i; | 定义整型变量i | | int *p | p为指向整型数据的指针变量 | | int a[n]; | 定义整型数组a,它有n个元素 | | int *p[n]; | 定义指针数组p,它由n个指向整型数据的指针元素组成 | | int (*p)[n]; | p为指向含n个元素的一维数组的指针变量 | | int f(); | f为带回整型函数值的函数 | | int *p(); | p为带回一个指针的函数,该指针指向整型数据 | | int (*p)(); | p为指向函数的指针,该函数返回一个整型值 | | int **p; | P是一个指针变量,它指向一个指向整型数据的指针变量 | ## 指针运算的小结 现把全部指针运算列出如下: 1) 指针变量加(减)一个整数。例如:     p++     p--     p+i     p-i     p+=i     p-=i 一个指针变量加(减)一个整数并不是简单地将原值加(减)一个整数,而是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数加(减)。 2) 指针变量赋值:将一个变量的地址赋给一个指针变量。 ~~~ p=&a; /* 将变量a的地址赋给p */ p=array; /* 将数组array的首地址赋给p */ p=&array[i]; /* 将数组array第i个元素的地址赋给p */ p=max; /* max为已定义的函数,将max的入口地址赋给p */ p1=p2; /* p1和p2都是指针变量,将p2的值赋给p1 */ ~~~ 注意,不能如下: p=1000; 3) 指针变量可以有空值,即该指针变量不指向任何变量:p=NULL; 4) 两个指针变量可以相减:如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数。 5) 两个指针变量比较:如果两个指针变量指向同一个数组的元素,则两个指针变量可以进行比较。指向前面的元素的指针变量“小于” 指向后面的元素的指针变量。 ## void指针类型 ANSI新标准增加了一种“void”指针类型,即可以定义一个指针变量,但不指定它是指向哪一种类型数据。