指针

指针的作用可以通过内存地址来控制变量,定义指针时*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(){
  lom (*q)(int a,int b) = &add;
  printf("%d",q(1,2));
}

这里的函数指针q就是等价了add函数,可以用指针指向函数地址;