C语言学习笔记——指针(一)

简介: C语言学习笔记——指针

1.指针的基本介绍

  1. 指针,也就是内存的地址;所谓指针变量,也就是保存了内存地址的变量
  2. 获取变量的地址,用&。例如:&num
  3. 指针类型,指针变量存的是一个地址这个地址指向的空间存的才是值。比如:int *ptr = # ptr 就是指向 int 类型的指针变量, 即 ptr 是 int * 类型。
  4. 获取指针类型所指向的值,使用:*(取值符号),比如:int * ptr , 使用*ptr 获取 ptr 指向的值

2.什么是指针

指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。就像其他变量或常量一样,在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为

int *ip;/* 一个整型的指针 */
double *dp;/* 一个 double 型的指针 */
float *fp;/* 一个浮点型的指针 */
char *ch;/* 一个字符型的指针 */

3.指针的算术运算

指针是一个用数值表示的地址。可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-

3.1.指针递增操作(++)

#include<stdio.h>
void main() {
  int arr[3] = { 10, 100, 1000 }, i = 0;
  int* ptr = arr;
  for (i = 0; i < 3; i++) {
    printf("数组%d的地址为:%p\n", i, ptr);
    printf("数组%d的内容为:%d\n", i, *ptr);
    ptr++;//在int类型中,基本单位为4byte,因此ptr++实际上是+4,指向下一个数组
  }
}

3cd8dbe46a614680b39cda985d8ede6a.png

因为数组是在内存空间中是连续的,因此对指向数组空间的指针变量进行++(或者--)操作的时候,实际上是+(或者-)一个指针类型的单位大小的byte(例如:int为4byte,double为8byte),因此,它就会指向下一个(或者上一个)数组元素

3.2.指针递减操作

#include<stdio.h>
void main() {
  int arr[3] = { 10, 100, 1000 }, i = 0;
  int* ptr = &arr[2];
  for (i = 2; i >= 0; i--) {
    printf("数组%d的地址为:%p\n", i, ptr);
    printf("数组%d的内容为:%d\n", i, *ptr);
    ptr--;//在int类型中,基本单位为4byte,因此ptr--实际上是-4,指向上一个数组元素
  }
}

c6d2d470842e47b1923eb4f9c4b9746d.png

3.3.指针+操作

#include<stdio.h>
void main() {
  int arr[3] = { 10, 100, 1000 }, i = 0;
  int* ptr = arr;
  ptr += 1;//在int类型中,基本单位为4byte,因此ptr--实际上是-4,指向上一个数组元素
  printf("数组%d的地址为:%p\n", i, ptr);
  printf("数组%d的内容为:%d\n", i, *ptr);
}

12c12500b02d4bc29c5eaf82cefbf1c8.png

指针+(或-)操作,与指针++(或--)操作同理,只是它更能快速的定位到你想要的数组元素

3.4.指针-操作

#include<stdio.h>
void main() {
  int arr[3] = { 10, 100, 1000 }, i = 0;
  int* ptr = &arr[2];
  ptr -= 1;//在int类型中,基本单位为4byte,因此ptr--实际上是-4,指向上一个数组元素
  printf("数组%d的地址为:%p\n", i, ptr);
  printf("数组%d的内容为:%d\n", i, *ptr);
}

9dbb2d49a21e46d9b6c0480d47b2185c.png

4.指针的比较

指针可以用关系运算符进行比较,如 ==、<、 <= 和 > 、>=。如果 p1 和 p2 指向两个变量,比如同一个数组中的不同元素,则可对 p1 和 p2 进行大小比较

#include<stdio.h>
void main() {
  int i = 0, arr[3] = { 10, 100, 100 };
  int* ptr = arr;
  //判断指针变量ptr内容,即其所指向的内存空间的地址
  //是否小于等于数组arr中第二个元素的地址
  //如果是,则进行printf
  while (ptr <= &arr[1]) {
    printf("arr[%d]的地址为:%p\tarr[%d]的内容为%d\n", i, ptr, i, *ptr);
    ptr++;
    i++;
  }
}

238d372433d24bd4b4cfb908521e2022.png


相关文章
|
2天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
7天前
|
存储 安全 C语言
C语言 二级指针应用场景
本文介绍了二级指针在 C 语言中的应用,
|
23天前
|
存储 编译器 C语言
【C语言篇】深入理解指针2
代码 const char* pstr = "hello world."; 特别容易让初学者以为是把字符串 hello world.放 到字符指针 pstr ⾥了,但是本质是把字符串 hello world. 首字符的地址放到了pstr中。
|
23天前
|
存储 程序员 编译器
【C语言篇】深入理解指针1
assert.h 头⽂件定义了宏 assert() ,⽤于在运⾏时确保程序符合指定条件,如果不符合,就报错终⽌运⾏。这个宏常常被称为“断⾔”。
|
26天前
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用
|
22天前
|
存储 C++
c++学习笔记06 指针
C++指针的详细学习笔记06,涵盖了指针的定义、使用、内存占用、空指针和野指针的概念,以及指针与数组、函数的关系和使用技巧。
28 0
|
23天前
|
C语言
【C语言】指针速览
【C语言】指针速览
15 0
|
28天前
|
C语言
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
|
28天前
|
C语言
【C初阶——指针4】鹏哥C语言系列文章,基本语法知识全面讲解——指针(4)
【C初阶——指针4】鹏哥C语言系列文章,基本语法知识全面讲解——指针(4)
|
4月前
|
C语言
C语言---指针进阶
C语言---指针进阶
40 0
下一篇
DDNS