专升本C语言学习--第八章 指针

本章详细讲解了C语言中的指针概念,包括指针的含义、直接访问和间接访问变量、指针变量的定义和使用、指针作为函数参数、通过指针引用数组和字符串、二维数组的地址以及指向函数的指针。内容涵盖各种实例和例题,帮助读者深入理解指针操作。

第八章 指针

指针的含义

指针指内存地址,通过内存地址找到变量所在的单元。

// 2020/11/14
// C
#include <stdio.h>
int main() {
   
   
  int a = 10;
  printf("%d\n", a);
  printf("%d\n", &a);
  return 0;
}

bear_sketch@2x

直接访问变量和间接访问变量

直接访问

直接从某个变量的地址空间中访问该内存空间所对应的值。

间接访问

某个变量i的地址存放到另一个变量j中,通过访问变量j得到变量i的地址,从而访问变量i的值。
image

指针变量

整形变量、浮点型变量、字符型变量、数组、指针变量
简单(基本)变量

整形、浮点、字符
引用变量
指针、数组
指针变量:如果有一个变量是用来专门存放地址的或存放另一个变量地址的变量。(所有的指针变量用来存放地址)。

指针变量的定义格式

*类型名称 指针变量的名称
例如:

int *pointer;//int:类型,表示这个指针变量指向一个int类型的值。 *:表示变量p是一个指针变量。p:表示变量中存放地址。*p:表示该存放的地址指向的值。

注意:在定义指针变量时,必须指定指针变量的类型,而且一个指针变量,只能指向同类型的变量。不能一会指向整形变量,一会指向浮点型变量。
在第一次使用指针变量时,必须给指针变量赋初值。

// 2020/11/14
// C
#include <stdio.h>
int main() {
   
   
  int a = 10;
  int *p;             //定义指针变量
  p = &a;             //将a的地址赋给p
  printf("%d\n", *p); //输出指针p指向变量的值
  printf("%d\n", p);  //输出指针p指向变量a的地址

  return 0;
}

image 2

// 2020/11/14
// C
#include <stdio.h>
int main() {
   
   
  int a = 10;
  // int *p; //定义指针变量。1.定义
  // p = &a; //将a的地址赋给p。2.赋初值
  int *p = &a;
  *p = 99;//重新给指针变量p赋值,将会覆盖整形变量a的值
  printf("%d\n", *p); //输出指针p指向变量的值
  printf("%d\n", p);  //输出指针p指向变量a的地址
  printf("%d\n", a);

  return 0;
}

在这里插入图片描述

例如

两个整数a,b,按照由大到小的顺序输出

// 2020/11/14
// C
#include <stdio.h>
int main() {
   
   
  //两个整数a,b,按照由大到小的顺序输出
  int a = 10, b = 20;
  int *p1, *p2;
  p1 = &a;
  p2 = &b;
  int *p;
  if (a < b) {
   
   
    p = p1;
    p1 = p2;
    p2 = p;
  }
  printf("%d,%d\n", a, b);
	printf("%d,%d\n", *p1, *p2);
  return 0;
}

image 4

// 2020/11/14
// C
#include <stdio.h>
int main() {
   
   
  //两个整数a,b,按照由大到小的顺序输出
  int a = 10, b = 20, c;
  int *p1, *p2;
  p1 = &a;
  p2 = &b;
  int *p = &c;
  if (a < b) {
   
   
    *p = *p1;
    *p1 = *p2;
    *p2 = *p;
  }
  printf("%d,%d\n", a, b);
  printf("%d,%d\n", *p1, *p2);
  return 0;
}

image 5

例题

image 6

指针变量作为函数的参数

当函数的形参为指针类型时,在函数发生调用的时候,实参将变量 地址 传递给形参。

例题

// 2020/11/14
// C
#include <stdio.h>
int main() {
   
   
  //两个整数a,b,按照由大到小的顺序输出
  void swap(int *, int *);
  int x = 10, y = 100;
  int *a = &x, *b = &y;
  if (x < y)
    swap(a, b);
  printf("%d,%d\n", *a, *b);
  printf("%d,%d\n", x, y);
  return 0;
}
void swap(int *a, int *b) {
   
   
  int temp;
  temp = *a;
  *a = *b;
  *b = temp;
}

IMG_0559

// 2020/11/14
// C
#include <stdio.h>
int main() {
   
   
  //两个整数a,b,按照由大到小的顺序输出
  void swap(int *, int *);
  int x = 10, y = 100;
  int *a = &x, *b = &y;
  if (x < y)
    swap(a, b);
  printf("%d,%d\n", *a, *b);
  printf("%d,%d\n", x, y);
  return 0;
}
void swap(int *a, int *b) {
   
   
  int *p;
  p = a;
  a = b;
  b = p;
}

在这里插入图片描述

*a=*&a
在函数形参的声明和定义时,定义为数组也表示地址,比如:声明(void swap(int a[],int b[]);)定义(void swap(int a[],int b[]){})等同于void swap(int *a,int *b);

例题

在这里插入图片描述

函数返回值的方式

通过return方式返回值

// 2020/11/14
// C
//函数的返回值
#include <stdio.h>
int main() {
   
   
  int add1(int, int);
  int x = 3, y = 9;
  int sum = add1(x, y);
  printf("%d\n", sum);
  return 0;
}
int add1(int a, int b) {
   
   
  int sum;
  sum = a + b;
  return sum;
}

通过指针或者数组方式“返回”值

// 2020/11/14
// C
//函数的返回值
#include <stdio.h>
int main() {
   
   
  void add1(int, int, int *);
  int x = 3, y = 9;
  int<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liangpi_hero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值