指针初识总结(下)

简介: 指针初识总结

   2.指针减去指针  

指针减去指针得到的值的绝对值其实是两地址中间元素的个数

例如1:

#include<stdio.h>
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  printf("%d", &arr[9] - &arr[0]);    //指针减去指针
}

结果:

image.png

分析:

image.png

例如2:

#include<stdio.h>
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  printf("%d", &arr[0] - &arr[9]);    //指针减去指针
}

结果:

image.png

注意:指针减指针时,这两个指针必须是指向同一块空间的,比如:同一个数组。

应用

写一个函数模拟strlen函数的功能

#include<stdio.h>
int my_strlen(char* str)
{
  char* start = str;
  char* end = str;
  while (*end != '\0')
  {
    end++;
  }
  return end - start;       //指针减指针
}
int main()
{
  char arr[] = "apple";     //存在数组中的元素为 'a','p','p','l','e','\0'
  int len = my_strlen(arr);
  printf("%d", len);
}

结果:

image.png

    3.指针的关系运算

指针关系运算就是指比大小

1.#include<stdio.h>
#define N 5  //宏
int main()
{
  int arr[N] = { 1,1,1,1,1 };
  int* p;
  for (p = &arr[N]; p > &arr[0];)   //进行指针大小比较
  {
    *--p=0;
  }
  int i = 0;
  for (i = 0; i < N; i++)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}

结果:

image.png

分析:

image.png

四. 指针与数组

1.数组名是什么?

#include<stdio.h>
int main()
{
  int arr[5] = { 0 };
  printf("%p\n", arr);   //打印数组名地址
  printf("%p\n", &arr[0]);  //打印数组首元素地址
}

结果:

image.png

由结果看出,两个地址相同所以可以得出结论 :数组名绝大多数情况下指的是首元素地址


例外:


1.&arr  ——&数组名 ,数组名不是首元素的地址-此情况下数组名表示整个数组,&数组名 取出的是整个数组的地址


整个数组的地址与首元素的地址数值上相同,但表示的意义完全不同。分析如下:  

image.png2.sizeof(arr)——sizeof(数组名)此情况下数组名表示整个数组,sizeof(arr)计算的是整个数组的大小。

数字组可通过指针来访问

指针访问的是数组首元素地址

#include<stdio.h>
int main()
{
  int i = 0;
  int arr[5] = { 1,2,3,4,5 };
  int* p = &arr;  //访问首元素地址
  for (i = 0; i < 5; i++)
  {
    printf("%d ", *(p + i));
  }
}

结果:

image.png

五. 二级指针

#include<stdio.h>
int main()
{
  int a = 3;
  int* pa = &a;
  int** ppa = &pa;//二级指针存放的是pa的地址,及存放a地址的地址
}

如上面例子,二级指针存放的是pa的地址,及存放a地址的地址

当然也有三级指针,四级指针等

#include<stdio.h>
int main()
{
  int a = 3;
  int* pa = &a;
  int** ppa = &pa;//二级指针存放的是存放pa的地址,及存放a地址的地址
  int*** pppa = &ppa;//三级指针
  int**** ppppa = &pppa;//四级指针
}

后面以此类推。

五.指针数组

指针数组本质是一个数组

是一个存放指针数组

#include<stdio.h>
int main()
{
  int a = 3;
  int b = 5;
  int c = 8;
  int* arr[] = { &a,&b,&c };//指针数组,用来存放指针
}
目录
打赏
0
0
0
0
1
分享
相关文章
|
9月前
|
深入理解指针(2)
深入理解指针(2)
50 2
C 指针详解
C 语言中的指针是一个强大而重要的概念,用于间接访问变量的存储地址。指针是一个变量,存储其他变量的地址,类型与其指向的数据类型相关。基本操作包括取地址 (`&`) 和解引用 (`*`)。指针使用前需初始化,可指向有效地址或为空 (`NULL`)。指针支持算术运算,可用于数组和函数。通过 `malloc` 和 `free` 可管理动态内存。多级指针允许存储指针的地址。使用指针时需注意初始化、防止内存泄漏及避免访问无效地址。掌握指针是精通 C 语言的关键。
58 13
C++中的指针:深入理解与应用
C++中的指针:深入理解与应用
|
9月前
|
指针是什么
指针是什么
58 0
|
9月前
|
指针(1)
指针(1)
38 0
详解C指针
对于C语言开发来说内存的管理显得很重要,尤其是对于初学者刚学指针会感到头疼,学了很久也不知道指针到底是个什么东西,本文将简单介绍指针相关的内容。
详解C指针
指针(二)
指针变量指向的类型:将变量名和离他最近的一个一起拖黑 剩下啥类型 指针变量指向的类型就是啥类型
指针(二)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等