【C语言】指针&数组

数组

  • 传递数组给函数
      double getAverage(int arr[], int size)
      {
          int    i;
          double avg;
          double sum=0;
          for (i = 0; i < size; ++i){
              sum += arr[i];
          }
          avg = sum / size;
          return avg;
      }
      int main ()
      {
          int balance[5] = {1000, 2, 3, 17, 50};
          double avg;
          avg = getAverage( balance, 5 ) ;
          printf( "平均值是: %f ", avg );
          return 0;
      }
    
  • 函数返回数组: 返回一个指向数组的指针
    int * getRandom()
    {
        static int r[10];
        int i;
        srand((unsigned)time(NULL));
        for(i=0;i<10;++i){
            r[i] = rand();
        }
        return r;
    }
    int main()
    {
        int *p;
        int i;
        p=getRandom();
        for(i=0;i<10;i++){
            printf("*(p+%d):%d\n",i,*(p+i));
        }
        return 0;
    }
    
  • 传递指针给函数
    void getSeconds(undigned long *par)
    {
        *par = time(NULL);
        return;
    }
    getSeconds(&sec);
    
  • 函数返回指针
    int * getRandom()
    {
      srand((unsigned)time(NULL));
      r[3] = rand();
      return r;
    }
    p = getRandom();
    printf("%d",*p);
    

指针

运算符

  • &: 返回变量地址
  • *: 指向一个变量
    优先级
  • NULL: 声明变量时若无确切地址, 可赋一个NULL值
    int *ptr = NULL;
    
    • 地址0x0, 多数系统不允许访问地址0的内存, 表明不指向一个可访问的内存位置.

运算

  • 增减
    • 递增ptr++: 指向下一个元素的存储单元
    • 递减ptr--: 指向前一个元素的存储单元
    • 跳跃的字节数取决于指针指向的变量数据类型长度(int4字节)
  • 比较
    • ==, <, >
    • ptr <= &var[MAX-1]

指针数组

int *ptr[MAX];
ptr[i]=&var;
x=*ptr[i];

const char *names[]={   //  指向字符的指针数组来存储一个字符串列表
    "KCZX",
    "XHYZ",
    "TJDX",
    "GKGZ",
};

指针指针

int **ptr2;

ptr1 = &V;
ptr2 = &ptr1;

printf("%d",V);
printf("%d",*ptr1);
printf("%d",**ptr2);

猜你喜欢

转载自blog.csdn.net/weixin_46143152/article/details/126671580