首页 > 其他分享 >指针初步了解

指针初步了解

时间:2024-07-29 18:57:49浏览次数:13  
标签:return int len 初步 地址 了解 printf 指针

地址和指针概念

        地址:在计算机内存中,每个存储单元都有一个唯一的地址,就像我们现实生活中的门牌号码一样。通过这个地址,我们可以找到相应的存储单元,从而访问其中存储的数据。

        指针:指针则是一个特殊的变量,它存储的是内存地址。可以将指针想象成一个箭头,它指向了内存中的某个位置。通过指针,我们可以间接地访问到指针所指向的内存地址中的数据。

指针变量

定义:存放变量地址的变量是指针变量,它用来指向另一个变量。

基类型 * 指针变量名;

  • 整型是用来装整数的数据类型。
  • 指针是用来装地址的数据类型。

指针变量只能存放地址(指针),不能将一个整数或任何其他非地址类型的数据赋给一个指针变量。

&取地址运算符二级自右向左
*指针运算符二级自右向左
int main(void)
{
    int a = 10;
    int *p;
    p = &a;

    printf("%d\n",a);
    printf("%d\n",*p);
    return 0;
}
  • 通过指针变量中的值到内存空间中定位。
  • 从定位处开始向后偏移sizeof(基类型)。
  • 将偏移好的那部分内存空间当作是一个基类型来看。

函数调用时,一般为值传递,因此不能直接访问,需要通过指针来取地址进行间接访问,从而能够在被调函数中修改主调函数。

int main(void)//验证大小端字节序
{
    int i = 1;
    char *p = (char *)&i;//强制类型转换

    if(*p == i)
    {
        printf("little\n");//小端存储
    }
    else
    {
        printf("big\n");
    }
    return 0;
}

数组与指针

数组也可以作为指针,数组传参时本身传递的就是首元素地址。

a[i] <---> *(a + i)

指针数组求和

//指针数组求和
int main(void)
{
    int a[] = {1,2,3,4,5,6,7,8,9,0};
    int len = sizeof(a) / sizeof(a[0]);
    int i;
    int sum = 0;
    int *p = a;
    for(i = 0;i < len;++i)
    {
        sum += *(a + i);
    }
    printf("%d\n",sum);

    return 0;
}

当指针为空指针,指针当前状态为不可访问。int *p; p = NULL;

二分查找

int *binaryFind(int *a,int len, int n)
{
    int begin = 0;
    int end = len - 1;
    while(begin <= end)
    {
        int mid = (begin + end) / 2;
        if(*(a + mid) > n)
        {
            end = mid -1;
        }
        else if(*(a + mid) < n)
        {
            begin = mid + 1;
        }
        else
        {
            return a + mid;
        }
    }
    return NULL;    
}

使用函数递归完成数组遍历

void printArray(int *a, int len)
{
    if(len == 0)
    {
        return;
    }
    else
    {
        printf("%d\n",*a);
        return printArray(a + 1,len - 1);
    }
}

标签:return,int,len,初步,地址,了解,printf,指针
From: https://blog.csdn.net/qq_69639971/article/details/140777671

相关文章

  • C语言:指针的进阶
    指针的进阶一、字符指针(一)字符指针(二)常量字符串和字符数组二、指针数组和数组指针(一)指针数组int*p1[10](二)数组指针int(*p2)[10]三、函数指针(一)函数指针1、概念2、两段有趣的代码(1)(*(void(*)()0))();(2)void(*signal(int,void(*)(int)))(int);(二)函数指针数组......
  • c语言自学第二十天----深入探究指针下(补前面的)
    一.二级指针C++中的指针是一个非常重要的概念,而二级指针是指向指针的指针。什么是指针?指针是一个变量,用来存储内存地址。它可以指向其他变量或对象,并通过解引用操作符"*"来访问所指向的值。什么是二级指针?二级指针是指向指针的指针,它存储的是指针的地址。通过二级指......
  • 详细了解Servlet中过滤器和监听器的使用
    目录一、过滤器1.1概念1.2过滤器的实现1.3过滤器中方法的介绍1.4过滤器的执行过程二、监听器2.1概念2.2 监听器的实现2.3不同监听器接口的介绍1. ServletContextListener接口2. HttpSessionListener接口3. HttpSessionAttributeListener接口一、过滤......
  • 数组指针与指针数组
       数组指针与指针数组这两者虽然听起来很像,但是他们的本质却截然不同在这之前,我们先了解一下二维数组,二维数组的格式为: 数组类型  数组名[][];前一个代表的是数组的行数,后一个代表的是数组的列数,其实二维数组的元素可以理解为是一维数组,inta[2][2]={{1......
  • c语言-指针
    6指针一、指针是什么1、指针是地址(1)地址是什么?a. 内存中用于cpu标识的一组编号   --是以十六进制的形式存储的b.cpu要么是32位,要么是64位的地址针注:这里电脑是64位,而空间是16G,这是因为电脑还有内存条,一个内存条有8G,所以总共是16G。这里的RAM是动态内存,是正在使用......
  • 基础篇之如何了解一个算法,从这些方面来探索-以ssd为例
    以SSD(SingleShotMultiBoxDetector)算法为例,你可以从多个方面了解它的基础知识、结构、工作原理、优点以及应用。以下是一些建议的问题和学习路径:基础介绍SSD算法的基本概念是什么?你可以问:SSD是什么?它解决了什么问题?SSD算法的优点和缺点有哪些?你可以问:SSD相对于......
  • C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
    写在最前,一篇文章学会C语言指针顶级重要,学习C语言最重要的一部分-------指针第八章指针超详细讲解_指针变量_二维数组指针_指向字符串指针文章目录写在最前,一篇文章学会C语言指针第八章指针超详细讲解_指针变量_二维数组指针_指向字符串指针1.指针变量1.1指针变......
  • 盒子模型-小了解
    前言:什么是盒子模型?我们可以把所有的html标签都看作一个盒子,这些盒子就像我们生活中的快递,每个盒子都存在内容(买的物品)、保护层(内边距)、快递盒(边框)、快递之间的距离(外间距)。所以,盒子模型主要定义了四个区域:内容(content)、内边距(pading)、边框(border)、外间距(margin)。盒子模型......
  • C语言初识指针
    概述:本文章主要介绍C语言中指针最基础和核心的知识点。内存:在学习指针之前,让我们先了解内存空间、内存是如何编号、以及内存单元的大小。内存空间:内存空间的分配类似于日常生活中对空间的管理。我国国土面积960万平方公里,为加强对各个地区的管理,设立了省、市、区等行政单......