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

实例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‘)。如图

1e8da2810988be3dffd366cbd436ac37.png

实例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个字节)。
edbe06367083a4c8816186a4258f9ea9.png

实例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‘,如图所示:

feb2a96bdd79075ed87ddf2a6ca07bc6.png

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

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

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

char *pc11=”abc”;

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python代码画小狗_程序员教你用代码手绘一只可爱的小狗,正好拿去送给女朋友给她个惊喜...

最近经常在抖音上刷到会画画的大神给小姐姐手绘各种可爱的小动物,非常的哇塞哦~ 作为程序员的我那是羡慕不已啊!我要是学会这招是不是可以尝试给我心仪很久的女神告白了?女神没准会很开心!(好吧,我承认我是…

如何修改emcp的sn号_百家号领域选择错误怎么办?百家号怎么更改领域?

我之前就强调过,做自媒体运营,正式开始之前,先做好定位,选好自己擅长的或者感兴趣的细分领域,这样才能保证以后能长期做,保证内容的输出量。很很多新人听说自媒体能赚钱,就直接进来了&#xff0…

apache根据ip分发_腾讯广告进入“IP新融点”时代

文 | 若谷广告业务增长放缓,会员数量持增,爆款内容产品难遇,品牌方需求升级,在这样现实情境下,传统营销模式亟待升级,腾讯广告就此进行了一次综合性的变革,以IP新融点方式进行应对这一现实挑战。…

eclipse下创建Maven项目

1.选择创建Maven项目,选择不适用骨架形式(Creat a simple project) 如图: 2.packing选择war的形式 如图: 由于packing是war形式,那么下面就出现了webapp的目录 3.由于我们要用eclipse把项目发布到tomcat…

git add remote_最全的git常用命令(建议收藏)

一、 Git 常用命令速查git branch 查看本地所有分支git status 查看当前状态git commit 提交git branch -a 查看所有的分支git branch -r 查看远程所有分支git commit -am "init" 提交并且加注释git remote add origin git192.168.1.119:ndshowgit push origin maste…

stm32l0的停止模式怎么唤醒_Mac外接显示器的显示模式怎么设置

不少人在使用Mac笔记本的时候都会想要为电脑外接一个大一点的显示器呢!要知道在外接显示器中可是有着四种显示模式呢!你知道Mac外接显示器的显示模式怎么设置吗?想要了解有关显示模式的各种问题么?快来阅读下面的这篇文章来寻找答…

Guava源码分析——Immutable Collections(4)

Immutable的集合体系,还有中很重要的集合没有介绍,就是ImmutableMap,通过UML图,可以看出ImmutableMap的结构体系。 首先来看一下ImmutableBiMap,因为普通ImmutableMap的实现依赖于它。ImmutableBiMap在ImmutableMap的基…

建筑电气工程设计常用图形和文字符号_怎么看懂建筑电气工程图?用最直白方式,教你基础识图!超级详细...

​如何看懂建筑电气工程图?我们可能知道AutoCAD,也可能知道在迅捷CAD图库下载建筑电气工程图纸,还可能会使用CAD绘制简单的图形对象。但是,当我们需要进行建筑识图的时候,你也可能连里面的经典图纸符号都不认识。如何看…

Android仿探探卡片拖拽,Vue 仿探探拖拽卡片的效果

原标题:Vue 仿探探拖拽卡片的效果已更新Vue3版,请给前端大全发送关键字vue3仿探探获取Vue3版类似 Tinder 和 探探 的卡片效果的组件,社区中已经非常多了。我这一版除了可以实现和他们一样的效果外。还增加了 飞卡 的效果,就是类似…

Codeforce 水题报告(2)

又水了一发Codeforce &#xff0c;这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C&#xff1a;The Child and Polygon: 描述&#xff1a;给出一个多边形&#xff0c;求三角剖分的方案数&#xff08;n<200&#xff09;。 首先很明显可能是区间dp&#xff0c;我们…

textureview 旋转90度后平铺_C++初级编程NOIP题:11H1537: 图像旋转

时间限制: 1 Sec 内存限制: 128 MB题目描述输入一个n行m列的黑白图像&#xff0c;将它顺时针旋转90度后输出。输入第一行包含两个整数n和m&#xff0c;表示图像包含像素点的行数和列数。1 < n < 100&#xff0c;1 < m < 100。接下来n行&#xff0c;每行m个整数&…

qt中的qwidget如何实现自定义部件_2.3信号和槽(中)

2.3.1 在ui中编辑信号槽这一小节我们来看一下如何在ui中编辑信号槽。我们想要在ui中实现点击按钮&#xff0c;能够控制进度条的显隐。新建GUI项目SignalsAndSlots2&#xff0c;类名SignalsAndSlots2&#xff0c;基类选择QWidget。打开ui文件。在编辑界面中拖入一个Progress Bar…

html中 一条样式规则,css规则的基本格式是什么?

CSS(Cascading Styel Sheet)是控制 Web 页面外观的一系列格式设置规则,是网页设计必不可少的工具之一。下面我们就开始学习css的基本语法格式。css规则的基本格式是什么&#xff1f;层叠样式表是一个完全的纯文本文件&#xff0c;通常以“css”为扩展名作为单独的文件来使用…

python清空列表_Python之列表

Python变量没有数据类型&#xff0c;所以Python没有数组。整数&#xff1b;浮点数&#xff1b;字符串&#xff1b;对象创建一个列表&#xff1a;1.member[大鱼,123,3.14,[1,2,3]]2.empty[]向列表添加元素&#xff1a;append&#xff08;&#xff09;&#xff1a;member[大鱼,12…

华为什么时候更新鸿蒙os,华为鸿蒙系统升级时间表

华为鸿蒙系统升级时间表6月2日HUAWEI Mate 40 ProHUAWEI P40 ProHUAWEI Mate 40 ProHUAWEI Mate 30 ProHUAWEI Mate 40 RS保时捷设计HUAWEI Mate 30 Pro 5GHUAWEI Mate 40HUAWEI Mate 30E Pro 5GHUAWEI Mate 40EHUAWEI Mate 30 RS保时捷设计HUAWEI Mate 2HUAWEI Mate 30HUAWEI …

为什么OC语言很难

作为一个Objective-C的coder&#xff0c;我总能听到一部分人在这门语言上抱怨有很多问题。他们总在想快速学习这门语言来写一个App出来&#xff0c;但他们也总是联想到Objective-C看上去实在太难了或者在想这些语法符号都是神马玩意&#xff1f;不错&#xff0c;他们问得非常好…

小狐狸ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法

最新版2.6.7版下载&#xff1a;https://download.csdn.net/download/mo3408/88656497 很多会员在上传小程序前端时经常出现首页无法打开的情况&#xff0c;错误提示无法打开该页面&#xff0c;不支持打开&#xff0c;这种问题其实就是权限问题&#xff0c;页面是通过调用web-v…

http status 404 – 未找到_从零开始搭建自己的网站004添加404处理页面

在将web-war上传到服务器并重启tomcat后&#xff0c;发现找不到login页面目录结构&#xff1a;add exception do wth page2.添加页面内容&#xff1b;到w404.jsp异常处理&#xff0c;404首页 Home (current) Link Dropdown Action Another action Disabled Search 百度百科&am…

云计算的认识和看法_云存储已经成为存储的未来,你的存储跟上节奏了吗?

云计算是目前业界最关注的话题&#xff0c;其实云计算让很多人云里雾里。而云存储则是存储的未来。云存储这个概念的出现&#xff0c;在一定程度上改变了我们对于传统存储模式的看法。但是云存储想必让很多人迷惑&#xff0c;今天我们就来聊聊云存储的那些事儿。对于一些计算机…

coco2dx c++ HTTP实现

coco2dx c HTTP实现 达到的结果如下面的 iPhone截图 android 日志截图 流程图例如以下 功能主要通过CURL c pthread 实现 我实现的不是多线程断点&#xff08;假设要实现能够依据我这个进行加入任务序列&#xff0c;可參考 cocos2d-x 中AssetsManager的实现&#xff0c;事实上…