首先,我们输出一个字符串都知道是用%s来输出,但是我们并没有多想是通过什么方式来输出的。

今天我在看指针数组的时候发现了一个问题,按就是定义一个字符类型的指针数组,

/*字符串的输出本身就需要他的地址,字符串没有单独的类型变量表示,只能用char类型数组来表示,指针数组所有空间存放的都是指针,所以在放字符串的时候,你这个字符串已经是一个地址了*/

我用一个通俗易懂的例子来说明一下:(你必须要知道的就是字符串的输出是要第一个字符的首地址)

刚刚说到每一个指针数组的空间都是用来存放地址的,所以不管你放什么进去这个数组都会默认你存了一个地址进去。

当你存放一个字符串进去的时候,也就是指针数组把你这个字符串的地址放进去了,存进去了,这时候第i个元素是字符串的地址,用的时候直接p1[i]就可以了

现在你再看代码,对于在指针数组里面的字符串为什么在输出的时候不用*p1[i]而是用p1[i], 因为你, 因为在指针数组中p1[i]中第i个元素就是字符串的地址,那么为什么用*(p1+i)也可以呢,因为你这个数组是指针,使用指针的时候既可以*(p1+i),也可以p1[i], 这应该是学习到指针都应该知道的事情。

#include<stdio.h>
int main()
{char *p1[5] = {"s你是大帅比", "s嗨害!","s鸡汤别来", "keep going","s栓Q了" };int i;for(i = 0; i < 5; i++){printf("%s\n", *(p1 + i));//*(p1 + i) 和 p1[i]一样,因为输出字符串时用字符串中第一个字符的地址来输出的}return 0;} 

/*用指针数组输出数字的时候就是要用*p1[i] , 因为每一个空间对应的是变量的地址 ,输出数字不能用地址,而是要用地址去寻找这变量对应的值*/

如:

#include<stdio.h>
int main()
{int a = 1, b = 2, c = 3, d = 4, e = 5;int *p2[5] = {&a,&b,&c,&d,&e};int i;for(i = 0; i < 5; i++){printf("%d\n", **(p2 + i));//**(p2 + i) 与 *p2[i]一样}return 0;} 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

总结:对比下来,简而言之就是看你输出的需求,字符串输出就是要地址,数值要的是变量。地址是不需要继续取地址符,而你输出数值的时候,但是你放进去的是地址,输出是数值,自然不能直接用地址,要用地址所指向的那个变量空间。

C语言(较深入原理):%s通过字符串首元素地址输出,用指针数组来作示例相关推荐

  1. 【C 语言】数据类型本质 ( 数据类型 | 数据类型本质 | 数组地址 | 数组首元素地址 )

    文章目录 一.数据类型 二.数据类型本质 ( 数组地址 | 数组首元素地址 ) 一.数据类型 " 数据类型 " 是 数据的抽象 ; 相同类型的数据 , 表示形式相同 , 存储格式相 ...

  2. C语言数组名、数组名取地址、数组首元素地址之间的关系

    C语言中数组名a.数组名取地址&a.数组首元素地址&a[0]三者的概念有点绕,花了点时间好好琢磨了一下,将自己的理解记录下来,如有错误之处,欢迎赐教. 首先看下面的一小段代码: #in ...

  3. 【C 语言】数组 ( 数组相关地址 | 数组首元素地址 | 数组地址 )

    文章目录 一.数组相关地址 1.数组首元素地址 2.数组地址 二.代码示例 一.数组相关地址 数组首元素地址 与 数组地址 值相等 ; int array[10]; 其中 array + 1 的值是 ...

  4. php gbk字符串 存utf8 html,php utf8 gbk 数组 互转(示例代码)

    这些都是工作中常用的 前几年写过 但没有记录的习惯,后边有要用到麻烦,现在记录下 以后直接拿来用 数组里的 utf8_to_gbk 方法 是上一篇写的 直接调用 public static funct ...

  5. C语言基础10——指针进阶。字符指针、指针数组、数组指针、函数指针、函数指针数组、回调函数、数组名详解、杨氏矩阵、字符串旋转

    目录 字符指针 指针数组 数组指针 数组传参.指针参数 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 练习 数组名的意义 指针笔试题 字符指针 字符指针的另一种使用方式 #include ...

  6. C语言的指针\数组用图解一次搞懂

    目录 1.指针 1.1指针相关标识符 1.1.1 取地址符号 & 1.1.2 解引用符号 * 1.1.3 const 符号 1.1.4 算数运算(偏移概念) 1.2野指针 1.3多级指针 1. ...

  7. C语言数组之指针数组和数组指针

    目录 前言 1.指针数组 1.1.指针数组的定义 1.2.指针数组详解 2.数组指针 2.1.数组指针的定义 2.2.数组指针详解 3.二维数组与数组指针 4.数组名和数组名取地址的区别 4.数组指针 ...

  8. 【C语言】指针进阶 - 指针数组 数组指针 数组指针传参 函数指针 指向函数指针数组的指针

    目录 一.字符指针 一道题 二. 指针数组 解引用打印数组元素 &数组名 数组名 字符指针初始化 三.数组指针 取数组地址-放在数组指针里 类型 数组指针的使用 二维数组传参 判断 四.数组参 ...

  9. 【让你从0到1学会C语言】指针/数组传参以及static关键字

    作者:喜欢猫咪的的程序员 专栏:<C语言> 喜欢的话:世间因为少年的挺身而出,而更加瑰丽.                                  --<人民日报> ...

最新文章

  1. 设计模式研究(二)-Singleton
  2. python中itemgetter函数_Python中的sorted函数以及operator.itemgetter函数
  3. mysql与ftp连接过慢的原因
  4. ffmpeg分解视频文件并加密
  5. 计算机绘画作品 星空,关于近期绘画作品《星空系列》的自述:
  6. redis 字符串数据(string)
  7. SAP License:SAP S/4HANA Cloud [ERP 云]
  8. rocket mq 监听端口_如何使用Jmeter实现MQ数据的发送和接收?性能测试实战篇
  9. [Java] 蓝桥杯ALGO-10 算法训练 集合运算
  10. php nsdata,转换NSArray- JSON- NSData- PHP服务器- JSON表示
  11. 什么是性能调优?性能调优的方法有哪些,流程是怎样的
  12. 【毕业设计项目】基于单片机的指纹识别系统实现 - 物联网 stm32 c51
  13. 样本不均衡及其解决办法
  14. 大话西游片尾曲-一生所爱(世界是巨大的枷锁,你不得不重复自己或是别人的生活)
  15. WSL2加载独立硬盘和设置固定IP
  16. 粗糙的量刑模型-随机森林算法
  17. RSA+Base64加密
  18. 一英寸芯片大小_芯片特征尺寸背后的秘密是什么
  19. pythonDay5-基本语法-中文编码-多行语句连接-输入输出-个人名片制作-类型之间的转换-判断用户的年龄
  20. LintCode python入门题

热门文章

  1. 去除idea中mapper文件中的黄色背景两种方法
  2. 2022-2028年中国不良资产管理行业市场竞争策略及未来发展潜力报告
  3. 精益求精——斐波那契数列的logn解法
  4. C++ 析构函数何时被调用?
  5. 也试试简单的美肤美白(机器视觉)
  6. 黑马程序员-----Java基础-----IO流-3
  7. 买花瓶(简单动态规划DP)
  8. excel_for_hrm:2种通过表格函数计算员工应出勤天数的方法
  9. 浏览器怎样更新java,Eclipse中js文件修改后浏览器不能及时更新的解决办法
  10. SUSE Linux zypper命令