C语言--指针详解1

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

一,指针
    1.地址
        内存单元的编号叫地址;
    2.指针
        内存单元的地址叫指针;
        变量的地址叫指针;
    3.指针变量
        存储变量地址的变量叫指针变量;
        
    说明:
        在不作区分的情况下,将地址指针指针变量统称指针;
    4.指针变量的形式
        存储类型数据类型*指针变量名;
        例如:
            int * p;
        说明:
            存储类型:同普通变量,指针变量本身的存储类型;
            数据类型:既可以是基本类型,也可以是struct,也可以是void,还可以是指针;
                      此数据类型是指针指向空间内容的数据类型;(重点)
            *:表示变量为指针变量;
            指针变量名:符合命名规则;
    指针变量的初始化
        存储类型数据类型*指针变量名=地址值; eg1
        
        :
            int i = 10;
            int * p =&i; //由于p指针指向的数据为int型,所以需要给指针变量putr int型变量的地址; eg2
        
        :
            char ch ='a';
            char * q =&ch;
    6.&与*
        &:取变量的地址
        *:
            1>在定义指针变量时,*用来说明定义的变量为指针变量;
                例如:
                    float * p; // *说明定义的变量p为指针变量;
            2>在定义之后,指针变量名前加*,含义是取指针指向空间的值;(解引用)
                例如:
                    int i = 10;
                    int * p;
                    p =&i; //给指针变量p赋i的地址
                    printf(“i =%d * p =%d \ n”,i,* p);
    注意:
        &与*互为逆运算;
        例如:
            int i = 10;
            的printf(”
            
    7.指针的运算
        本质:地址的运算
        定义指针变量px和py;
        
        1>算数运算:(+ - ++ - )
            px + n:指针向地址大的方向偏移n个数据类型;(此数据类型为指针指向内容的数据类型)
            px-n:指针向地址小的方向偏移n个数据类型;(此数据类型为指针指向内容的数据类型)
            px ++://等价:px = px + 1;指针向地址大的方向移动1个数据类型;(此数据类型为指针指向内容的数据类型)
            px--:指针向地址小的方向移动1个数据类型;(此数据类型为指针指向内容的数据类型
            PX-PY:两指针之间相差的数据类型的个数;
            
            
            例如:
                int a [10] = {1,2,3,4,5,6,7,8,9,10};
                int * p =&a [0]; //
                int * q =&a [7];
                printf(“p =%p p + 3 =%p \ n”,p,p + 3); // p = 0xbffb8334 p + 3 = 0xbffb8340
                printf(“q =%p q-3 =%p \ n” ,q,q-3); // q = 0xbffb8350 q-3 = 0xbffb8344
                printf(“qp =%d \ n”,qp); // qp = 7
                    
            注意:
                n为整数
        2>关系运算(> <> = <= ==!=)
            eg1:
                int * p; //“野指针“
                * p = 10; //不允许通过野指针访问野指针指向的空间; eg2
                    
            :
                int * p = NULL; // stdio.h定义的宏值#define NULL 0
                if(NULL == p)/ /判断指针是否为有效的指针
                {
                    return;
                }
                
                * p = 10; //错误
        3>赋值运算eg1
            :
                int i = 10;
                int * p =&i;
            eg2:
                int i = 10;

                int * q = p;
            eg3:
                int a [10];
                int * p = a;
二,指针与数组
    通过指针操作数组;
    1,一级指针与一维数组
        例如:
            int a [10] = {1,2,3,4,5,6,7,8, 9,10};
            int * p = a; // int * p =&a [0];
            int i;
            for(i = 0; i <10; i ++)
                printf(“%d”,a [i]);
            的printf( “\ n”);
            
            for(i = 0; i <10; i ++)
                printf(“%d”,p [i]);
            printf(“\ n”);
    结论:
        1> 数组中第i个元素的表示:(i = 0,1,2,.....)
            a [i] p [i] *(a + i) *(p + i)*(&a [i])*(&p [i])
        2>
            &a [i]&p [i](a + i)(p + i)         
三,        字符指针
    1.形式
存储类型char *指针变量名; eg1
        :
            char ch ='a';
            char * p =&ch; //
            * p ='b';
            的printf( “* P =%C \ n”,* P);
        eg2:
            字符指针操作字符串(重点)char * p =“hello world”; //将字符串的首地址赋予p指针
            printf(“* p =%c \ n”,* p); // * p ='h'
            * p ='a'; // ERROR不能通过指针修改常量区的东西
        例子:
            char * p;
            p =“你好世界”;
            printf(“* p =%c \ n”,* p); // * p ='
            h'printf(“p =%s \ n”,p);

            

            char * p = NULL;
            p =“你好世界”;
        eg4:
            char ch [20] =“hello world”;(√)
            char ch1 [20];
            ch1 =“hello world”;(×)//数组名不能作为左值
        eg5:
            char ch1 [20];
            ch1 [20] =“hello world”;(×)// ch1 [20]表示的是数组ch1中的第21个元素,越界
        eg6:
            char ch [20] =“hello world”; //将常量区的“hello world”拷贝贝份到ch的空间
            * ch ='a';
            printf(“%s \ n”,ch); //结果:aello world
    

实例:
    1,求一个字符串的长度。(指针) 

    的#include <stdio.h>中

    int main()
    {
        char ch [64];
        得到(CH);

        int num=0;
        char *p = ch;

        while(*p != '\0')
        {
            num++;
            p++;
        }

        printf("num=%d\n",num);

        return 0;
    }

    2、计算一个字符串的空格数,并删除全部空格;
    
    #include<stdio.h>

    int main()
    {
        char a[64];
        gets(a);

        int i,j,num=0;
        for(i=0;a[i]!='\0';i++)
        {
            if(a[i] == ' ')
            {
                num++;
                for(j=i;a[j]!='\0';j++)
                    a[j] = a[j+1];
                i--;
            }
        }
        
        printf("num=%d %s\n",num, a);

        return 0;
    }

    3、用指针给一个数组赋值,并打印。
    
    #include<stdio.h>

    int main()
    {
        int a[10];
        int len = sizeof(a) / sizeof(int);
        int *p = a;
        int i;
        for(i=0;i<len;i++)
            scanf("%d",p++);
        p = a;

        for(i = 0; i <len; i ++)
            printf(“%d”,p [i]);
        的printf( “\ n”);

        返回0;
    }        
            
            
            
            
        

ComfyUI的G-Dino模型加载器报错解决方案:从崩溃到重生 遇到G-Dino模型加载器报错不要慌,按照本文的步骤操作,99%的问题都能解决。模型文件正确下载到指定位置segment_anything节点安装完整且无冲突需要补充更多细节或故障排除方法吗?可以随时告诉我。 阅读详情

相关推荐

如何设计一个低代码平台

近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大。那么,如果用户想从零开始设计一个低代码平台,该如何做呢?

Jarod_Chou的博客 8225

C语言指针1

C语言中的指针1并不只是简单的地址加1而已,实际上指针1,地址偏移的多少是与指针的类型相关的。 demo如下: int main() { char arr1[10]; char *p1 = &arr1[0]; printf("%d \n", p1); printf("%d \n", p1+1); //p1+1地址偏移了一个sizeof(char) int arr2...

Think88666的博客 1万+

如何通过常规测井曲线识别砂岩、泥岩、碳酸盐岩和煤层

常规测井曲线通过不同岩性的物理性质差异识别砂岩、泥岩、碳酸盐岩和煤层。砂岩表现为低自然伽马(GR)、中等密度(RHOB)和声波时差(DT);泥岩以高GR、高中子(NPHI)和高DT为特征;碳酸盐岩显示低GR、高RHOB和低DT;煤层则具有极低RHOB、极高NPHI和DT的独特组合。综合GR与三孔隙度曲线(RHOB、NPHI、DT)可有效区分岩性,其中密度测井对煤层识别最可靠。电阻率(RT)曲线辅助判断流体性质,但需结合其他参数综合分析。

love code, love life. 2519

指针1 表示什么意思

这种指针的算术运算是依据指针的类型进行的,因此在进行指针运算时要注意数据类型的大小。另外,还需要注意指针不要越界,即不要超出其所指向的内存范围。在C/C++中,指针1表示将指针的值增加1个单位。这个单位取决于指针所指向的数据类型的大小。需要注意的是,指针的加法操作是基于指针所指向的数据类型的字节大小进行的,而不是简单的加1操作。当对指针进行加法操作时,指针的值会增加(或减少)对应数据类型的大小。例如,如果指针指向一个。类型的变量,那么执行指针1操作后,指针的值将增加。个字节,使其指向数组的第二个元素。

wanghao312的博客 4806

【C语言指针加一

关于为什么指针加了相应数值而结果不是自己预期,对于指针加法的一些理解

qq_73575817的博客 2150

指针1的含义、指针减法运算

实例 #include <stdio.h> int main() { char a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; char* p1 = a; printf("p1=%p\n", p1); printf("p1+1=%p\n", p1 + 1); int b[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int* p2 = b; printf("p2=%p\n", p2); printf("p2+1=%p

Akalaka的博客 5202

C语言指针1的原理,真的很难吗

问题背景 最近有小伙伴对于C语言指针的运算有点疑问:指针变量加1之后,到底向后偏移了几个字节呢?示例代码如下,这段代码运行在32位CPU平台上: #include<stdio.h> #pragma pack(1) struct tree { int height; int age; char tag; }; #pragma pack() int main() { char buffer[512] = {0}; struct tree *t_ptr = NULL; char

一起学嵌入式 2437

c语言指针详解1

前⾯的内容我们了解到,32位机器假设有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或者0,那我们把32根地址线产⽣的2进制序列当做⼀个地址,那么⼀个地址就是32个bit位,需要4个字节才能存储。我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何⾼效的管理呢?变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变量。

kuaiww的博客 1710

【C语言】带你层层深入指针——指针详解1

本文深入解析C语言指针的核心概念,通过宿舍楼类比形象说明内存地址的作用。重点讲解了指针变量的定义、取地址(&)与解引用()操作符的使用方法,以及指针变量在内存中的大小特性(32位系统4字节,64位系统8字节)。详细阐述了指针加减整数的步进规则和指针间的运算限制,强调指针类型决定访问权限和运算步长。最后指出void指针的特殊性及使用注意事项,为后续深入讲解指针奠定基础。全文采用代码示例配合理论说明,帮助读者直观理解指针的工作原理。

zore__的博客 6514

【C语言指针详解1

指针的基础知识

2302_80020887的博客 840

C语言指针详解1

C语言指针学习

2301_80191662的博客 1119

c语言指针详解1

本文主要介绍了C语言指针的基本概念与应用。首先解释了内存编址原理,说明计算机通过地址总线访问内存单元。其次详细讲解了指针变量的定义和使用:通过取地址操作符(&)获取变量地址,使用解引用操作符()访问指针指向的数据,并分析了指针变量在不同平台下的大小(32位系统4字节,64位系统8字节)。然后阐述了指针类型的重要性,指出不同类型指针在解引用和指针运算时的差异,以及void指针的特殊用途。最后介绍了指针的三种基本运算:指针与整数加减、指针相减和指针关系运算,并给出了数组遍历等实际应用示例。

2201_75600170的博客 660

c语言指针详解(1)

内存是计算机用于存储数据和程序的地方。在 C 语言中,程序运行时会使用内存来存储各种数据类型的值,如整数、字符、浮点数等,以及程序的指令。

2401_83191546的博客 1844

C语言指针详解1

前言:C语言中,想要学好C,我觉得看指针学的好不好是一个重要指标,于是我下定决心爆肝三天,出三期指针详解版。从初阶到进阶,由浅到深的探究。指针是什么:

多敲代码防脱发的博客 1018

C语言指针详解1 —— 指针基础知识

在本篇文章中,主要是针对C语言指针部分进行基础知识的讲解,分为指针的概念,指针变量,指针的运算,const关键字,野指针,assert断言以及函数的传址调用7个板块。

L_0907的博客 1067

C语言指针详解1

一、内存和地址二、指针变量和地址三、指针变量类型的意义四、const修饰指针五、指针运算六、野指针七、assert断言八、指针的使用和传值调用在正式学习指针之前,我们先要理解在C/C++中两个非常重要的概念——和。正是有这两种因素的存在,才使得C/C++拥有当今不可动摇的地位。

2302_80177865的博客 2275

c语言指针详解_C语言指针详解1

#include int main(){int * p;int i = 5;p = &i;printf("*p=%di=%d", *p, i);return 0;}1.p是变量的名字,int * 表示的p变量存放的是int类型变量的地址 int * p不是定义了一个名字为* p的变量;p是变量名,p变量的数据类型是int *类型即存放int变量地址的类型。2.p 保存了 i 的地址,所以 ...

weixin_39888018的博客 97

C语言指针详解 1

首先数据在我们电脑中是以内存的形式在内存中进行存储的。当我们在使用这些数据时,cup是如何快速准确的调用数据的呢?在我们生活中也有类似C语言指针的东西,如门牌号,学号等。我们称其为地址或编号。在C语言中我们称它为指针

2403_88027130的博客 366

C语言指针详解1

/ ====================== 拓展:*左右都加const const int *const p ======================// ====================== 情况1:const 在 * 左边 const int *p ======================// ====================== 情况2:const 在 * 右边 int *const p ======================// 指针向后移动,指向下一个字符。

2601_95032979的博客 438
上一篇: 基于linux环境tcp网络编程(在线英英词典)文档【3】
下一篇: C语言--指针详解2
JIANXIN.Y
博客等级 码龄9年 270粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值