iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言指针如何使用
  • 799
分享到

C语言指针如何使用

2023-06-30 16:06:17 799人浏览 安东尼
摘要

这篇“C语言指针如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言指针如何使用”文章吧。指针概述C语言中指针也可以

这篇“C语言指针如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言指针如何使用”文章吧。

指针概述

C语言中指针也可以认为是一种类型,不同于数值型和字符型的类型。推演过去指针变量也就是相当于不同的变量类型,不同于数值变量、字符型变量、字符串变量。

指针变量两种类型:自身类型和指向的类型

自身类型:将变量名去掉,剩下的就是指针变量类型。

指向类型:将变量名和离它最近的一个*去掉,剩下的类型就是指针指向的类型

int num = 10;int* p = NULL;p = #

如代码中 指针变量的自身类型是 int * 型;指向类型是 int 型。

自身类型

自身类型是指变量p本身的类型,变量p中放的是地址内容,地址指向的是放整型的数据,为什么需要说是指向整型的地址呢?因为不同类型数据占据的不同大小的一整块内存,整型是一个占4字节大小的一个整体内存,字符型是一个占2个字节大小的一个整体内存,编译器不会把它们拆分开。如定义了一个int型变量,它的地址是0x7fffffff00,紧接着马上定义一个char型变量,他的地址就直接到了0x7fffffff04。从0x7fffffff00 ~ 0x7fffffff04中间不会再被分开了放int型数据,0x7fffffff04 ~ 0x7fffffff06中间不分开放char型数据。

所以 自身类型 是基本类型 + *组合而成,虽然里面放的都是地址,但是地址指向的一整块内容是有区别的。

指向类型

指向类型 是指 指针变量中放置的地址是指向的内容类型。

int num = 10;int* p = NULL;p = #int** pp = NULL;pp = &p;

这是一个二级指针,指向的类型是int*,说明变量pp指向的是指针类型的数据。

代码例子

代码1

 #include <stdio.h> int main() {     int num = 100;     printf("num = %d, num address = %#lx\n", num, &num);     //num = 100, num address = 0x7ffd4376ff4c        int* p = NULL;     p = &num;     printf("*p = %d, p =  %#lx, &p = %#lx\n", *p, p, &p);     //*p = 100, p =  0x7ffd4376ff4c, &p = 0x7ffd4376ff40     int** pp = NULL;     pp = &p;     printf("**pp = %d, *pp = %#lx, pp = %#lx\n", **pp, *pp, pp);     //**pp = 100, *pp = 0x7ffd4376ff4c, pp = 0x7ffd4376ff40     int arr[5]= {10,20,30,40,50};     printf("arr address = %#lx, arr[0] address = %#lx, arr[0] = %d\n",arr,&arr[0],arr[0]);     //arr address = 0x7ffd4376ff20, arr[0] address = 0x7ffd4376ff20, arr[0] = 10         int* parr = NULL;     parr = arr;     printf("parr = %#lx, *parr = %d, *(parr+2) = %d\n",parr,*parr,*(parr+2));     //parr = 0x7ffd4376ff20, *parr = 10, *(parr+2) = 30     char str[6]= {'a','d','m','i','n','\0'};     printf("str address = %#lx, str[0] address = %#lx, str[1]= %c\n", str, &str[0],str[1]);     //str address = 0x7ffd4376ff10, str[0] address = 0x7ffd4376ff10, str[1]= d       char* pstr = NULL;     pstr = str;     printf("pstr = %#lx,*pstr = %c,*(pstr+2)= %c\n",pstr,*pstr,*(pstr+2));     //pstr = 0x7ffd4376ff10,*pstr = a,*(pstr+2)= m     char str2[6] = "admin";     printf("str2 = %#lx, str2[0] address = %#lx, str2 = %s, str2[1]= %c\n",str2,&str2[0],str2,str2[1]);     //str2 = 0x7ffd4376ff00, str2[0] address = 0x7ffd4376ff00, str2 = admin, str2[1]= d     char* pstr2 = NULL;     pstr2 = str2;     printf("pstr2 = %#lx, pstr2 = %s\n",pstr2, pstr2);     //pstr2 = 0x7ffd4376ff00, pstr2 = admin        }

代码2

#include <stdio.h>int main() {     float num = 10;     printf("num = %f, &num = %#lx\n\n", num, &num);     //num = 10.000000, &num = 0x7ffcdf7ffd94     float* pnum = &num;     printf("*pnum = %f, pnum = %#lx, &pnum = %#lx\n\n ", *pnum, pnum, &pnum);     //*pnum = 10.000000, pnum = 0x7ffcdf7ffd94, &pnum = 0x7ffcdf7ffd88     float** p_pnum = &pnum;     printf("**p_pnum = %f, *p_pnum = %#lx, p_pnum = %#lx\n\n",**p_pnum,*p_pnum,p_pnum);     //**p_pnum = 10.000000, *p_pnum = 0x7ffcdf7ffd94, p_pnum = 0x7ffcdf7ffd88     char arr[10] = {'a','d','m','i','n'};     printf("arr[0]= %c, arr[5]= %c, arr[6]= %c, arr = %s\n",arr[0],arr[5],arr[6],arr);     printf("&arr[0]= %#lx, &arr[1]= %#lx, arr= %#lx\n\n", &arr[0], &arr[1], arr);     //arr[0]= a, arr[5]= , arr[6]= , arr = admin     //&arr[0]= 0x7ffcdf7ffd70, &arr[1]= 0x7ffcdf7ffd71, arr= 0x7ffcdf7ffd70     char* parr = NULL;     parr = arr;     printf("*parr = %c, *(parr+4)=%c, *(parr+5)=%c, parr = %s\n",*parr,*(parr+4),*(parr+5),parr);     printf("parr = %#lx, parr+4 = %#lx, parr+5= %#lx\n\n", parr, parr+4, parr+5);     //*parr = a, *(parr+4)=n, *(parr+5)=, parr = admin     //parr = 0x7ffcdf7ffd70, parr+4 = 0x7ffcdf7ffd74, parr+5= 0x7ffcdf7ffd75          char str[10]= "admin";     printf("str[0]= %c, str[5]= %c, str[6]= %c, str = %s\n",str[0],str[5],str[6],str);     printf("&str[0]= %#lx, &str[1]= %#lx, str = %#lx\n\n", &str[0], &str[1], str);     //str[0]= a, str[5]= , str[6]= , str = admin     //&str[0]= 0x7ffcdf7ffd60, &str[1]= 0x7ffcdf7ffd61, str = 0x7ffcdf7ffd60     char* pstr = NULL;     pstr = str;     printf("*pstr= %c, *(pstr+4)= %c, *(pstr+5)= %c, pstr = %s\n", *pstr, *(pstr+4), *(pstr+5), pstr);     printf("pstr = %#lx, pstr+4=%#lx, pstr+5= %#lx\n\n",pstr, pstr+4, pstr+5);     //*pstr= a, *(pstr+4)= n, *(pstr+5)= , pstr = admin     //pstr = 0x7ffcdf7ffd60, pstr+4=0x7ffcdf7ffd64, pstr+5= 0x7ffcdf7ffd65 }

数值型指针

数值型指针: int* p;

如:

int num = 100;int* p = &num;//同时定义和初始化int* p1 = NULL;//定义p1 = &num;//初始化

字符型指针

字符型指针可以分为指针指向的是单字符还是字符数组两种

单字符

字符型指针: char* p;

char name = 'a';char* p = &name;printf("p = %c",*p);//结果是 a

这里需要注意需要用 占位符 %c 去承接内容(或者说显示内容)

字符数组

字符型指针:char* p;

char arr[6] = {'a','d','m','i','n','\0'};printf("arr = %s, arr = %#lx\n",arr,arr);//admin,0x7ffffffc0printf("arr[0]= %c,arr[1]= %c\n",arr[0],arr[1]);//a,dchar* parr = NULL;parr = arr;     //也可以 parr =  &arr,但是编译时会报warningprintf("parr = %s, parr = %#lx\n", parr,parr);//admin,0x7ffffffc0printf("*(parr)= %c,*(parr + 1) = %c\n",*parr, *(parr+1));

这里需要注意字符数组末尾需要加&lsquo;\0&rsquo;字符表示字符数组结束,或者编译器自己会自动加上,所以在定义字符数组长度时需要加+1。

注意 字符数组名既可以表示地址也可以表示整个字符数组的内容,而不是第一个字符。相应的指针也是整个字符数组的内容。

printf("arr = %c\n", arr);printf("parr = %c\n", parr);

以上两行代码可以编译过但是不能显示内容,需要用占位符%s去承接整个字符数组内容。

字符串型指针

字符型指针:char* p;

char str[5] = "admin";printf("str = %s,str = %#lx\n",str,str); // admin,0x7ffffffe0.printf("str[0]= %c, str[1]= %c\n",str[0],str[1]);// a,dchar* pstr = NULL;pstr = str;printf("pstr = %s, pstr = %#lx\n",pstr,pstr); // admin,0x7ffffffe0.printf("*pstr = %c,*(pstr+1) = %c\n",*pstr,*(pstr+1)); // a,d

如代码中结果显示所示,字符串数组名即是地址,同时也是数组内容,根据占位符的不同显示不同内容,占位符为%s时显示字符串,%#lx显示地址。同样的对于赋值给的指针变量也具有同样的功能。

但是如果这里

printf("str = %c\n",str);//可以编译过但是不显示任何信息

以上就是关于“C语言指针如何使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网其他教程频道。

--结束END--

本文标题: C语言指针如何使用

本文链接: https://www.lsjlt.com/news/329878.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言指针如何使用
    这篇“C语言指针如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言指针如何使用”文章吧。指针概述C语言中指针也可以...
    99+
    2023-06-30
  • C语言中如何使用指针
    这篇文章将为大家详细讲解有关C语言中如何使用指针,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。指针总结部分笔记来源于王道C语言训练营指针:变量的地址指针变量:一个变量专门用来存放另一变量的地址1.指针的本...
    99+
    2023-06-25
  • C语言宏与指针如何使用
    这篇文章主要讲解了“C语言宏与指针如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言宏与指针如何使用”吧!1、关于definedefine是一个预处理指令,有两种用法,一种是用de...
    99+
    2023-07-02
  • C语言如何使用数组指针与函数指针
    这篇文章主要为大家展示了“C语言如何使用数组指针与函数指针”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言如何使用数组指针与函数指针”这篇文章吧。函数指针语法定义一个函数指针,并通过函数指针...
    99+
    2023-06-29
  • c语言结构体指针如何使用
    在C语言中,我们可以使用指针来操作结构体变量。首先,我们需要定义一个结构体类型,然后声明一个结构体变量。接下来,我们可以使用指针来操...
    99+
    2023-10-28
    c语言
  • C语言中如何使用指针函数和函数指针
    这篇文章给大家介绍C语言中如何使用指针函数和函数指针,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、指针函数当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。格式:...
    99+
    2023-06-17
  • C语言指针如何定义
    在C语言中,可以使用以下方法来定义指针:1. 在变量名前面添加一个星号(*),表示这是一个指针变量。例如:`int *ptr;` 表...
    99+
    2023-08-18
    C语言
  • C语言浅析指针的使用
    目录指针等价形式转换函数指针主函数指针 指针是一个变量 (1) 作用:只能存储地址的值 (2) 大小:32位操作系统中占4字节;64位操作系统中占8字节 (3) 取地址:& ...
    99+
    2024-04-02
  • C语言指针使用的方法
    这篇文章主要介绍了C语言指针使用的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言指针使用的方法文章都会有所收获,下面我们一起来看看吧。指针指针是一个变量(1) 作用:只能存储地址的值(2) 大小:32...
    99+
    2023-07-02
  • C语言指针如何初始化
    C语言指针可以通过以下几种方式进行初始化:1. 直接赋值给另一个指针:可以通过将一个指针的值直接赋值给另一个指针来进行初始化。例如:...
    99+
    2023-08-18
    C语言
  • C语言中的指针怎么使用
    这篇文章主要介绍“C语言中的指针怎么使用”,在日常操作中,相信很多人在C语言中的指针怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中的指针怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-17
  • C语言中指针的使用示例
    这篇文章给大家分享的是有关C语言中指针的使用示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、指针的作用运用指针可以有效地表达一些复杂地数据结构,比如系统地动态分配内存、消息机制、任务调度、定时器等等。掌握指...
    99+
    2023-06-29
  • C语言指针使用实例分析
    今天小编给大家分享一下C语言指针使用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。何为指针指针这玩意说白了,就是用来...
    99+
    2023-07-02
  • C语言中指针的使用案例
    这篇文章主要介绍C语言中指针的使用案例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、利用指针倒序字符串void _reversal(char* left, char* ri...
    99+
    2023-06-29
  • 如何理解C语言函数传参:指针的指针
    这篇文章主要介绍“如何理解C语言函数传参:指针的指针”,在日常操作中,相信很多人在如何理解C语言函数传参:指针的指针问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解C语言函数传参:指针的指针”的疑惑有所...
    99+
    2023-06-15
  • c语言数组指针怎么使用
    在C语言中,数组和指针是密切相关的。数组名本身就是指向数组第一个元素的指针。因此,可以使用指针来操作数组。下面是一些常见的数组指针用...
    99+
    2023-10-18
    c语言
  • C语言指针详解之野指针
    目录指针是什么?怎么表示?什么是指针变量?指针类型又是什么?指针类型存在的意义野指针是什么?野指针产生的原因一、 指针未初始化二、 指针越界访问如何避免野指针(野狗)的出现呢?指针运...
    99+
    2024-04-02
  • C语言指针怎么用
    这篇文章主要为大家展示了“C语言指针怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言指针怎么用”这篇文章吧。一、字符指针在指针的类型中我们知道有一种指针类型为字符指针 char* 。思...
    99+
    2023-06-25
  • c语言指针变量如何定义
    在C语言中,指针变量可以通过在变量名前面加上"*"符号来定义。例如,定义一个整型指针变量可以这样写: int *...
    99+
    2024-04-09
    c语言
  • 如何理解C语言中的指针
    这期内容当中小编将会给大家带来有关如何理解C语言中的指针,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1指针是什么指针是汇编语言中的一个对象,利用地址,指向存在电脑存储器中的另一个地方的值。由于通过地址能...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作