实例1

我们在pointer_test.c的文件中写一个test2()函数,我们定义一个有3个元素的字符数组初始化值分别为,’A’, ’B’, ’C’,然后定义一个字符指针pc,把数组ca的首地址复制给字符指针pc,然后通过访问指针变量pc,来读取指针变量pc所指向地址的数据,代码如下:

void test2(){    char ca[3]={'A','B','C'};    char *pc;    /*第一步 : 所有变量都保存在内存中,我们打印一下变量的存储地址*/    printf("ca  =%p",ca);    printf("&pc =%p",&pc);    /*第二步:所有变量都可以保存某些值,接着赋值并打印*/    //前面已经有ca[3]={'A','B','C'};    pc = ca;    printf("pc =%p",pc);    /*第三步:使用指针:1)取值  2)移动指针*/    printf("pc =%p",pc);  printf("*pc =0x%x",*pc); pc=pc+1;    printf("pc =%p",pc);  printf("*pc =0x%x",*pc); pc=pc+1;    printf("pc =%p",pc);  printf("*pc =0x%x",*pc);      printf("//=================");            }

main()函数

int main(int argc,char **argv){    printf("sizeof(char   )=%d",sizeof(char   ));    printf("sizeof(int    )=%d",sizeof(int    ));    printf("sizeof(char  *)=%d",sizeof(char  *));    printf("sizeof(char **)=%d",sizeof(char **));     printf("//=================");    //test0();    //test1();    test2();    return 0;}

编译

 gcc -m32 -o pointer_test pointer_test.c

运行:

 ./pointer_test

结果:

 sizeof(char   ) = 1 sizeof(int    ) = 4 sizeof(char  *) = 4 sizeof(char **) = 4 //============== ca  =0xffb946b9 &pc =0xffb946b4 pc =0xffb946b9 pc =0xffb946b9  *pc =0x41 pc =0xffb946ba  *pc =0x42 pc =0xffb946bb  *pc =0x43 //=================

分析:

  • 第一步:

首先定义一个3个元素的字符数组ca(数组名表示该数组存储的首地址),然后定义一个字符指针pc,然后通过printf()函数把定义这两个变量在内存中的地址打印出来。

  • 第二步:

执行pc = ca;就是把数组ca的首地址复制给指针变量pc,然后通过printf()函数打印pc的值可以看出pc的值就是字符数组ca的首地址0xffb946b9。

  • 第三步:

通过移动指针我们可以发现数组所占用的内存是连续的,0x41(的ascii值‘A‘),0x42(的ascii值‘B‘),0x43(的ascii值‘C‘)。如图

实例2

我们在pointer_test.c的文件中写一个test3()函数,我们定义一个有3个元素的整型数组ia,初始化值分别为,0x12345678, 0x87654321, 0x13572468,然后定义一个整型指针pi,把数组ia的首地址复制给整型指针pi,然后通过访问指针变量pi,来读取指针变量pi所指向地址的数据,代码如下:

void test3(){    int ia[3]={0x12345678,0x87654321,0x13572468};    int *pi;    /*第一步 : 所有变量都保存在内存中,我们打印一下变量的存储地址*/    printf("ia  =%p",i);    printf("&pi =%p",&pi);    /*第二步:所有变量都可以保存某些值,接着赋值并打印*/    //前面已经有ia[3]={0x12345678,0x87654321,0x13572468};    pi = ia;    printf("pi =%p",pi);    /*第三步:使用指针:1)取值  2)移动指针*/    printf("pi =%p",pi);  printf("*pi =0x%x",*pi); pi=pi+1;    printf("pi =%p",pi);  printf("*pi =0x%x",*pi); pi=pi+1;    printf("pi =%p",pi);  printf("*pi =0x%x",*pi);     printf("//=================");    }   

把main()函数test2()修改为test3().

编译

gcc -m32 -o pointer_test pointer_test.c

运行:

./pointer_test

结果:

 sizeof(char   ) = 1 sizeof(int    ) = 4 sizeof(char  *) = 4 sizeof(char **) = 4 //============== ia  =0xff91c060 &pi =0xff91c05c pi =0xff91c060 pi =0xff91c060  *pi =0x12345678 pi =0xff91c064  *pi =0x87654321 pi =0xff91c068  *pi =0x13572468

分析:

  • 第一步:

我们定义一个有3个元素的整型数组ia数组名表示该数组存储的首地址),初始化值分别为,0x12345678, 0x87654321, 0x13572468, 然后定义一个整型指针pi,然后通过printf()函数把定义这两个变量在内存中的地址打印出来。

  • 第二步:执行pi = ia; 就是把数组ia的首地址复制给指针变量pi,然后通过printf()函数打印pi的值可以看出pi的值就是整型数组ia的首地址0xff91c060。
  • 第三步:我们知道 pi是整型指针变量,并且整型变量占用四个字节,所以整型指针变量pi是以四字节为单元进行访问的,所以pi和pi+1之间的差是一个整型变量的大小(4个字节)。

实例3

定义一个指向字符串的指针pc,然后对字符串指针进行初始化设置为abc,代码如下:

void test4(){    char *pc="abc";    /*第一步 : 所有变量都保存在内存中,我们打印一下变量的存储地址*/    printf("&pc =%p",&pc);    /*第二步:所有变量都可以保存某些值,接着赋值并打印*/    //前面已经有pc="abc";    /*第三步:使用指针:1)取值  2)移动指针*/    printf("pc    =%p", pc);      printf("*pc   =%c",*pc);    printf("pc str=%s", pc);  }   

把main()函数test3()修改为test4().编译

gcc -m32 -o pointer_test pointer_test.c

运行:

./pointer_test

结果:

 sizeof(char   ) = 1 sizeof(int    ) = 4 sizeof(char  *) = 4 sizeof(char **) = 4 //============== &pc   =0xfff49a68 pc    =0x08048b4b *pc   =a pc str=abc

分析:

  • 第一步:

定义一个指向字符串的指针pc,然后对字符串指针进行初始化设置为abc,此时,指针变量pc的值就是字符串abc的首地址,然后通过printf()函数把指针pc的地址打印出来为0xfff49a68

  • 第二步:

首先通过printf()函数打印出指针变量pc的值(字符串abc的首地址),pc的值为0x08048b4b,然后通过pc指针访问第一个字符(pc的就是字符串的首地址),所以pc的值就是字符‘a‘的地址,所以*pc的值就是’a‘,如图所示:

下面分析一下指向数组的指针和指向字符串的指针:

 char ca[3]={'A','B','C'}; char *pc0 = ca;

pc0是指向字符数组的字符指针,pc0就是数组首元素的地址,pc0=&a[0]

char *pc11=”abc”;

pc是指向字符串的字符指针,pc1就是字符串”abc”的首字符’a’的地址。

「新品首发」STM32MP157开发板火爆预售!首批仅300套

c int转char数组_C语言 指向数组和字符串的指针相关推荐

  1. arrays中copyof复制两个数组_C语言100题集合026-使用指针交换两个数组中的最大值

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...

  2. go 指针变量和普通变量的转化_C语言 | 指向结构体变量的指针变量

    "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...

  3. c语言向自定数组_C语言一维数组的定义和引用

    C语言一维数组的定义和引用 C语言支持一维数组和多维数组.如果一个数组的所有元素都不是数组,那么该数组称为一维数组. 一维数组的定义方式 在C语言中使用数组必须先进行定义.一维数组的定义方式为: 类型 ...

  4. 一维数组c语言,c语言一维数组_C语言一维数组入门教程

    摘要 腾兴网为您分享:C语言一维数组入门教程,优衣库,小米手环,小米钱包,小度等软件知识,以及胎教宝典,一级建造师题库软件,康佳渠道,刷点卷,一加系统,音乐节拍器,liveuc视频会议,辽宁省政务服务 ...

  5. 定义整型数组_C语言基础-数组怎么用

    到目前为止,我们了解到C语言中可以使用整型,浮点型和字符型的数据类型来描述我们人类世界的各种数据,但是这些还远远不够-- 我们在IOT领域经常会遇到这样一个数据使用场景:某天的固定时间内,会有多台(我 ...

  6. c语言数组形式,c定义数组_C语言定义数组的几种形式

    摘要 腾兴网为您分享:C语言定义数组的几种形式,中日翻译,中国天气,智慧医疗,知富等软件知识,以及课观银行帮,驾照查分app,侍魂,cad转pdf转换器,云南山歌,指南针运动,韶关人社,我的世界拔刀剑 ...

  7. c定义一个整型数组_C语言学习|数组

    一.数组的定义 数组:由若干类型相同的相关数据项按顺序存储在一起形成的一组同类型有序数组的集合 元素:用一个统一的名字标识这组数据,这个名字称为数据名,构成数据的每一个数据项 下标:从0开始的整数,遵 ...

  8. C语言 main 函数参数 main(int argc, char *argv[]) - C语言零基础入门教程

    目录 一.main 函数写法 二.main 函数参数简介 三.使用 main 函数参数 1.打印 main 函数参数 a.直接运行 exe 文件 b.打开 cmd 命令行窗口执行 exe 文件 c.打 ...

  9. c 字符串数组_C语言探索之旅 | 第二部分第四课:字符串

    内容简介 前言 字符类型 显示字符 字符串其实就是字符的数组 字符串的创建和初始化 从 scanf 函数取得一个字符串 操纵字符串的一些常用函数 总结 第二部分第五课预告 1. 前言 上一课 C语言探 ...

最新文章

  1. 2022-2028年中国干电池制造行业产销需求与投资预测分析报告
  2. 一次SQL查询优化原理分析(900W+数据,从17s到300ms)
  3. 免费申领Bio-protocol单细胞研究实验方法精选集
  4. c# 单例 按需创建
  5. 推荐系统里,你是怎么Embedding的?
  6. Java工作笔记-JPA中Repository新增自定义更新操作
  7. 拳王虚拟项目公社:说一个合法正规兼职创业,副业虚拟资源项目
  8. 【Kafka】kafka 偶然报错 NotLeaderForPartitionException
  9. UI设计师必备知识|最全UI设计规范!
  10. Android开发笔记(一百三十五)应用栏布局AppBarLayout
  11. python ggplot为什么不能取代matplotlib_为什么geom_bar()不会像python ggplot中那样更改填充颜色?...
  12. Visio | 动画制作
  13. 虚拟偶像发展史:TA们到底如何成功?万字复盘
  14. 微信小程序发布全流程
  15. 如何在水经注微图中加载地形地貌图进行道路设计
  16. matlab高维矩阵提取其中n维
  17. python判断字符串是否包含英文字母
  18. 【干货】实例讲解:跨部门沟通和与领导沟通的心得与技巧
  19. CodeForces 283C Coin Troubles 分析+背包思想
  20. 高等数学:第五章 定积分(2) 定积分的性质、中值定理

热门文章

  1. 下拉列表项过多会导致浏览器卡死
  2. MySQL与MongoDB的区别
  3. php 判断网络图片是否存,PHP判断远程图片或文件或url是否存在-180
  4. mysql union 用法 update_mysql---union的用法
  5. 随便选一张扑克牌_扑克牌魔术手法教学,简单易学的纸牌魔术,三分钟让你成为大师...
  6. c语言计算据标准时间多少天,C语言系列--时间处理
  7. 图解springmvc 执行流程
  8. 【OS学习笔记】三十七 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----主引导扇区代码
  9. spring----IOC知识点
  10. 微信公众平台-杂项:小程序导航