【C语言复习】指针部分

1.指针定义

指针,顾名思义,是定义的某类型指针指向相同类型的已知变量所在内存中的地址。 前加"&"xx表示得到xx的地址。

指针也就是内存地址,指针变量是用来存放内存地址的变量。

int main (){
    int var_runoob = 10;
    int *p;              // 定义指针变量
    p = &var_runoob;
    printf("var_runoob 变量的地址: %p\n", p);
    return 0;
}

2.用指针遍历一维数组

int main (){
   int  var[] = {10, 100, 200};
   int  i=0, *ptr;
   /* 指针中的数组地址 */
   ptr = var;
   while(i<3){
      printf("存储地址:var[%d] = %p\n", i, ptr );
      printf("存储值:var[%d] = %d\n", i, *ptr );
      /* 指向下一个位置 */
      ptr++;
      i++;
   }
   return 0;
}

3.指针数组

#include <stdio.h>
const int MAX = 3;
int main (){
   int  var[] = {10, 100, 200};
   int i, *ptr[MAX];
    
   for ( i = 0; i < MAX; i++){
      ptr[i] = &var[i]; /* 赋值为整数的地址 */
   }
    
   for ( i = 0; i < MAX; i++) {
      printf("%d", *ptr[i] );
   }
   return 0;
}


const int MAX = 4; 
int main (){
   const char *names[] = {
                   "Zara Ali",
                   "Hina Ali",
                   "Nuha Ali",
                   "Sara Ali",
   };
   int i = 0;
 
   for ( i = 0; i < MAX; i++)   {
      printf("%s\n", i, names[i] );
   } //注意char数组输出是什么
   return 0;
}

4.多级指针——指向指针的指针

A Pointer → B Pointer → Data Variable

int main(){
    int V;
    int *Pt1;
    int **Pt2;
    V=100;
    Pt1 = &V;
    Pt2 = &Pt1;
    //输出V的三种方式
    printf("var = %d\n", V );
    printf("*Pt1 = %d\n", *Pt1 );
    printf("**Pt2 = %d\n", **Pt2);  //注意怎么输出的
}

5.传递指针给函数

//传一维指针 easy
void getSeconds(unsigned long *par){
   /* 获取当前的秒数 */
   *par = time( NULL ); //可以将该指针传回去 虽然不在同一个作用域
   return;
}

int main (){
   unsigned long sec;
   getSeconds( &sec ); //传的是地址~
   /* 输出实际值 */
   printf("Number of seconds: %ld\n", sec );
   return 0;
}

6.函数返回指针

#include <stdio.h>
#include <stdlib.h>  
/* 输入数组 */
int * getArray(){
   static int  r[10];
   for(int i=0; i<10; i++){
	   scanf("%d",&r[i]);
   }
   return r;
} 
/* 要调用上面定义函数的主函数 */
int main (){
   /* 一个指向整数的指针 */
   int *p;   
   p = getArray();
   for (int i= 0; i < 10; i++){
       printf("*(p + [%d]) : %d\n", i, *(p + i) );
   } 
   return 0;
}

7.函数指针

就是将一个函数换成一个简单的名字【看得懂即可,写代码时尽量不用】

注意:需要把函数返回值和指针的类型统一

#include <stdio.h>
int max(int x, int y){
    return x > y ? x : y;
}
int main(void){
    /* p 是函数指针 */
    int (* p)(int, int) = &max; // &可以省略
    int a, b, c, d;
    printf("请输入三个数字:");
    scanf("%d %d %d", & a, & b, & c);
    /* 与直接调用函数等价,d = max(max(a, b), c) */
    d = p(p(a, b), c);
    printf("最大的数字是: %d\n", d);
    return 0;
}

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值