0
点赞
收藏
分享

微信扫一扫

基于Kitti数据集的智能驾驶目标检测系统(PyTorch+Pyside6+YOLOv5模型)


在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏:《快速入门C语言》《C语言初阶篇》

⛺️生活的理想,就是为了理想的生活!

文章目录

📋 前言

🔥 注:前一章的指针讲解是《指针的概念》

💬 指针运算

💭 指针±整数

📚 代码演示:

#include <stdio.h>
int main()
{
	int arr[10] = { 0 };
	int* p = &arr[0];
	//不用下标访问
	int sz = sizeof(arr) /sizeof(arr[0]);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		*p = i;
		 p = p+1;
	}
	p = &arr[0];
	for (i = 0; i < sz; i++)
	{
		printf("%d\n",*(p+i));
	}
	return 0;
}

前面的例子懂了我们再来看这个例子大家看看!
📚 代码演示:

#define N_VALUES 5
float values[N_VALUES];
float *vp;
//指针+-整数;指针的关系运算
for (vp = &values[0]; vp < &values[N_VALUES];)
{
     *vp++ = 0;
}

💭 指针-指针

📚 代码演示:

#include <stdio.h>
int my_strlen(char* s)
{
    char* p = s;
    while (*p != '\0')
        p++;
    return p - s;
}

int main()
{
    char arr[] = "abcdef\0";
    int len = my_strlen(arr);
    printf("%d\n", len);
	return 0;
}

💭 指针的关系运算

📚 代码演示:

for(vp = &values[5-1]; vp >= &values[0];vp--)
{
    *vp = 0;
}

📚 代码改进:

for(vp = &values[5-1]; vp > &values[0];)
{
    *--vp = 0;
}

💬 指针和数组

📚 代码演示:

#include <stdio.h>
int main()
{
 int arr[10] = {1,2,3,4,5,6,7,8,9,0};
    printf("%p\n", arr);
    printf("%p\n", &arr[0]);
    return 0;
}

📑 代码结果:
在这里插入图片描述

int arr[10] = {1,2,3,4,5,6,7,8,9,0};
int *p = arr;//p存放的是数组首元素的地址
//等同于 *p= &arr[0];

💭 指针和数组变种推演

而指针是用来存放地址的,数组又是一块连续的空间。所以我们可以拿指针变量来接收数组首元素的地址,用来遍历数组!

  • 所以我们对指针解引用 和 数组下标是相等的。
  •     arr[ i ] == *(p+i)
  • 而    *(i+p) == arr[ i ]
  • 所以   *(i+p) == i[ arr ]
  • 而 : p == arr == &arr[ 0 ]
  • 所以   *() 操作符 等同于 [ ]

📚 代码演示:

#include <stdio.h>
int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
    int* p = arr; //指针存放数组首元素的地址
    int sz = sizeof(arr) / sizeof(arr[0]);
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        arr[i] = i;
        printf("%d %d %d %d\n",arr[i],i[arr],*(p+i),p[i]);
    }
    return 0;
}

📑 代码结果:
在这里插入图片描述

  • 既然这俩个操作符是相等的那么又能推演出:
  • *(arr+i) == arr[ i ] == *(i+arr)
    🔥 注:这里就不给大家演示了,大家可以自己去试着练一下呢。

💭 指针和数组的关系

  • 指针变量就是指针变量,不是数组。指针变量的大小是4/8个字节,是用来专门存放地址的.
  • 数组就是数组,不是指针,数组是一块连续的空间。可以存放一个或,多个类型相同的数据。

🔰 那么他们的联系是什么?

  • 🌱 数组中,数组名其实是数组首元素的地址,数组名 == 地址 == 指针

  • 🌱 当我们知道数组首元素地址的时候,因为数组又是连续存放的,所以通过指针就可以来遍历访问我们的数组。

💬 二级指针

📚 代码演示:

#include <stdio.h>
int main()
{
	int a = 10;
	int* p = &a;//p是一级指针变量,指针变量也是变量,
	//变量是在内存中开辟空间的,是变量就有地址
	int** pp = &p;//pp就是二级指针变量,
	//二级指针变量就是用来存放一级指针变量的地址
    return 0;
}

💬 二级指针的运算

📚 代码演示:

#include <stdio.h>
int main()
{
	int a = 10;
	int* p = &a;
	int** pp = &p;
	**pp = 100;
	printf("%d", a);
    return 0;
}

📑 代码结果:

在这里插入图片描述

📝全篇总结

✅ 归纳:
好了以上就是关于指针的运算 数组和指针的关系 以及 二级指针的概念我们就全讲解完毕了!
  指针的运算
  数组和指针的关系
  二级指针

☁️ 本章的内容就是这么多啦!不知道大家了解了没有呢?有不懂的可以私信评论嗷!
看到这里了还不给博主扣个:
⛳️ 点赞☀️收藏 ⭐️ 关注

💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。
在这里插入图片描述

举报

相关推荐

0 条评论