指针
指针的作用可以通过内存地址来控制变量,定义指针时*p = &变量名,指针会在计算机内存分配4个字节存放这个变量的首地址,*p叫指针变量
指针的用法
#include <stdio.h>
int main(){
int a = 20;
int *p;
p = &a;
*p = 25;
printf("%d \n",a);
return 0;
}
此时输出为25
把*p可以当作a进行赋值操作;
在数组中的用法:
#include <stdio.h>
void selectArrayMax1();
int a[] = {1,2,3,4,5,9};
int main(){
selectArrayMax1(&a);
return 0;
}
void selectArrayMax1(int *q){
int size = sizeof(a) / sizeof(a[0]);
int max = *q;
int i;
for (i = 0; i < size; q++,i++)
{
if(max < *q)
max = *q;
}
printf("max %d \n",max);
}
这里的q++ 是数组地址加1但不是普通的在内存地址上加个一而已,这里的加一是数组内存地址加4个字节也就是首地址加4个字节,q默认为a[0]的地址,加一也就是a数组下标加1为a[1];for循环比大小最后的结果是max 9。
#include <stdio.h>
const int MAX = 3;
int main ()
{
int var[] = {10, 100, 200};
int i, *ptr;
/* 指针中的数组地址 */
ptr = var;
for ( i = 0; i < MAX; i++)
{
printf("存储地址:var[%d] = %x\n", i, ptr );
printf("存储值:var[%d] = %d\n", i, *ptr );
/* 移动到下一个位置 */
ptr++;
}
return 0;
}
输出结果:
存储地址:var[0] = bf882b30
存储值:var[0] = 10
存储地址:of var[1] = bf882b34
存储值: var[1] = 100
存储地址:of var[2] = bf882b38
存储值:var[2] = 200
这里的ptr = var如果数组不写下标默认为var数组的首地址可以不用取地址符;
函数指针
int add(int a,int b){
return a+b;
}
int main(){
int (*q)(int a,int b) = &add;
printf("%d",q(1,2));
}
这里的函数指针q就是等价了add函数,可以用指针指向函数地址;