0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

指针的概念

C语言编程学习基地 来源:C语言编程学习基地 作者:C语言编程学习基地 2022-08-11 15:16 次阅读

简单回顾一下指针的概念

内存会划分以字节为单位的空间,每一个字节都有一个编号(地址/指针)

指针变量可以存放这个地址/指针

注:我们日常所说的指针,一般是指针变量

下面让我们坐上指针进阶的直通车,来到第一站!字符指针

字符指针

代码示例:

int main(){  char ch = 'w';  char* p= &ch;    char* pa = "abcdef";  return 0;}

字符变量ch里面存放了字符w

字符指针p里面存放了ch的地址

指针变量pa里面存放了abcdef字符串的地址,我们并没有对这个字符串进行初始化。而是直接把它放进了指针变量pa里面。

和前两行的字符w不同,abcdef是存储在内存中的只读数据区,无法修改,即便通过指针也无法修改。

为了避免理解出错,我们一般会加上const修饰

const char* pa = "abcdef";

const放在*的左边

表示const修饰的指针指向的内容,表示指针指向的内容不能通过指针来改变

但是指针变量本身是可以改变的

const放在*的右边

表示const修饰的是指针变量本身,指针变量的内容不能被修改

但是*pa指针指向的内容是可以通过指针来修改的

代码示例:

int main(){  char arr1[] = "abcdef";  char arr2[] = "abcdef";
  const char* str1 = "abcdef";  const char* str2 = "abcdef";
  if (arr1 == arr2)    printf("arr1==arr2
");  else    printf("arr1!=arr2
");
  if (str1 == str2)    printf("str1==str2
");  else    printf("str1!=str2
");
  return 0;}

它的结果如下:

0485bd1c-1944-11ed-ba43-dac502259ad0.png

在例子1里面我们提到过,str1和str2这种情况都指向一个常量字符串

既然字符串abcdef无法被改变,编译器也没有必要创建两个独立的内存空间来存放两个相同的字符串

所以str1和str2的地址是完全一样的

而arr1和arr2是完全不同的数组,它们的首元素地址不一样,打印的结果是不相等

typedef关键字

如何使用:

在MSDN中,我们可以查找到typedef的定义

0495db66-1944-11ed-ba43-dac502259ad0.png

简单地说,typedef的作用就是把一个已有的类型名换一个新的名字

typedef int* pint;

这句代码的意思是:将int*命名为pint

pint在使用的时候和int*完全一致

我们仍然可以使用int*

在结构体里面,我们可以用typedef来缩短原有结构体定义的语句

如:将struct Stu命名为Stu

04ce3dc6-1944-11ed-ba43-dac502259ad0.png

typedef和#define的区别

我们同样可以使用#define语句,进行这项操作

#define PINT int*

定义语句PINT为int*

指针连续定义

先来了解一下如何正确连续定义两个指针

int*pa,*pb;//正确的连续定义
int*pa,pb;//错误//pa是int*类型,而pb是int类型

因为这两个的情况非常容易搞混,所以我们不建议连续定义指针

typedef int* pint;#define PINT int*
int main(){    pint pa,pb;//可连续定义指针    //pa-->int*    //pb-->int*    PINT pa,pb;//等同于int*pa,pb    //pa-->int*    //pb-->int}

·typedef会产生一个新的变量类型

·#define只是在对应位置进行替换

因为typedef产生了一个新的类型,pint为int*,但与int*也有不同

int pa,pb;//pa,pb都是int类型pint pa,pb;//pa,pb都是int*类型

而我们直接用int*进行连续定义指针变量是错误的

int*pa,pb;//错误//pa是int*类型,而pb是int类型

你学会了吗?我反正是学废了。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6867

    浏览量

    88800
  • 指针
    +关注

    关注

    1

    文章

    479

    浏览量

    70506
  • 代码
    +关注

    关注

    30

    文章

    4741

    浏览量

    68325

原文标题:【C语言】指针进阶第一站:字符指针 & typedef关键字!

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    跳转表、指针数组和函数指针概念

    笔者能力有限,如果文中有不对的地方,还请各位朋友能及时地给我指出来,我将不胜感激,谢谢!
    发表于 09-15 14:14 428次阅读

    浅析函数指针指针函数及其应用

    什么是指针?相信大家对这个问题其实并不陌生,对指针概念也不会很模糊,在这里我也大概介绍一下。
    发表于 03-08 13:17 240次阅读

    C语言中指针函数和函数指针概念及应用示例

    在C语言中,指针函数和函数指针是强大且常用的工具。它们允许我们以更灵活的方式处理函数和数据,进而扩展程序的功能。
    发表于 08-16 16:14 717次阅读

    C语言中多级指针概念和使用方法

    多级指针在C语言中是一种特殊的指针类型,它可以指向其他指针指针
    发表于 08-16 16:16 974次阅读

    C语言中空指针和野指针概念及产生原因

    在C语言中,指针是一种非常强大和灵活的工具,但同时也容易引发一些问题,其中包括空指针和野指针
    发表于 08-16 16:18 1276次阅读

    指针的基本概念和运算

    指针的基本概念和运算8.1 指针的基本概念和运算 8.2 指针与一维数组  8.3
    发表于 03-10 15:40

    2.5 C语言入职例程二:指针 精选资料分享

    2.5.1 强化指针概念指针是C语言中最基本且很重要的概念,某种程度上甚至可以说:指针是C语言的灵魂。不巧的是,我们公司新招聘的好多新人对C
    发表于 07-19 08:01

    嵌入式指针的相关资料分享

    一:嵌入式指针(embedded pointer) (1.1)嵌入式指针概念 一般应用在内存池相关的代码中;成功使用嵌入式指针有个前提条件:(类A对象的sizeof必须不小于4字节)
    发表于 12-20 07:11

    C51语言的指针、结构、联合和枚举

     指针是C51语言的精华也是难点。本章主要介绍指针概念、定义指针的方法,介绍指向一维数组、二维数组、字符数组的指针使用方法,
    发表于 06-12 23:47 112次下载

    C语言指针概念详解

    计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用4个字节,char 占用1个字节。
    的头像 发表于 12-30 17:12 3141次阅读
    C语言<b class='flag-5'>指针</b><b class='flag-5'>概念</b>详解

    C++程序设计教程之指针的详细资料说明

    本文档详细介绍的是C++程序设计教程之指针的详细资料说明主要内容包括了:1. 指针概念,2. 变量与指针,3. 数组与指针,4. 字符串与
    发表于 03-14 16:04 7次下载
    C++程序设计教程之<b class='flag-5'>指针</b>的详细资料说明

    采用标准C的强制转换和指针概念来实现访问MCU的寄存器

    总结一下,就是(*(volatile unsigned char *)0x25)可以看作是一个普通变量,这个变量哟固定的地址,指向0x25。而0x25只是个常量,不是指针,更不是变量。
    的头像 发表于 08-04 16:44 1995次阅读

    C语言高阶应用:函数指针概念和使用方法

    一个 GPRS 模块联网的小项目,使用过的同学大概知道 2G、4G、NB 等模块要想实现无线联网功能都需要经历模块上电初始化、注册网络、查询网络信息质量、连接服务器等步骤。
    发表于 04-01 10:26 877次阅读

    C语言进阶:函数指针概念和使用方法

    函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。 函数指针可以像一般函数一样,
    发表于 05-02 06:17 5827次阅读

    了解一下函数指针概念和使用方法

    在讲回调函数之前,我们需要了解函数指针
    的头像 发表于 11-06 10:04 618次阅读
    了解一下函数<b class='flag-5'>指针</b>的<b class='flag-5'>概念</b>和使用方法