#include<stdio.h>
void print_array_test(char ca[])
{
printf("ca : %s\n",ca);
printf("&ca : %s\n",&ca);
printf("&(ca[0]) : %s\n",&(ca[0]));
printf("&(ca[1]) : %s\n",&(ca[1]));
printf("*(ca+0) : %c\n",*(ca+0));
printf("*(ca+1) : %c\n",*(ca+1));
printf("ca+1 : %s\n",ca+1);
} void print_ptr_test(char *pa)
{
printf("pa : %s\n",pa);
printf("&pa : %s\n",&pa);
printf("&(pa[0]) : %s\n",&(pa[0]));
printf("&(pa[1]) : %s\n",&(pa[1]));
printf("pa+1 : %s\n",pa+1);
printf("pa[1] : %c\n",pa[1]);
printf("*(pa+1) : %c\n",*(pa+1));
printf("++pa : %s\n",++pa);
}
int main()
{
char abc[]="hello,world!";
print_array_test(abc);
print_ptr_test(abc); return 0;
}

数组abc[20]="hello,world!"

中&abc[i]与abc+i含义同样——取的是abc[i]的地址

指针pa =abc;

pa[i]与*(pa+i)是等价的——取的是abc[i]的值

鉴于以上程序,执行之:

[root@localhost code]# ./arrayandptr

ca : hello,world!

&ca : ▒▒▒,▒▒;

&(ca[0]) : hello,world!

&(ca[1]) : ello,world!

*(ca+0) : h

*(ca+1) : e

ca+1 : ello,world!

pa : hello,world!

&pa : ▒▒▒,▒▒;

&(pa[0]) : hello,world!

&(pa[1]) : ello,world!

pa+1 : ello,world!

pa[1] : e

*(pa+1) : e

++pa : ello,world!

[root@localhost code]#

C专家编程之为什么C语言把数组形參当做指针:数组/指针实參的更多相关文章

  1. 【c专家编程】分析c语言的声明

    联合: 在结构中,每个成员依次存储,而在联合中,所有成员都从偏移地址零开始存储,联合一般被用来节省空间,用法和struct相同. union bits32_tag { int whole; // 一个 ...

  2. C语言学习书籍推荐《C专家编程Expert C Programming Deep C Secrets》下载

    Peter Van Der Linden (作者) <C和C++经典著作 C专家编程Expert C Programming Deep C Secrets>展示了C程序员所使用的编码技巧, ...

  3. 《C专家编程》第三章——分析C语言的声明

    前面一章我们已经说过C语言存在的一些问题和它晦涩的地方,让我们对这门神奇的语言有了更深的了解.现在这一章则集中精力来讨论C语言的声明,分为三块,首先是说明C语言声明晦涩难懂的原因和声明是如何形成的,其 ...

  4. C专家编程阅读笔记

    周末闲来无事,(哗),好久之前买的C专家编程一直没看,翻起来看了一下 尽量不使用unsigned 尽量不要在代码中使用unsigned,尤其是一些看起来是无符号类型的数字,比如年龄等,因为难免要使用u ...

  5. c专家编程摘录

    C专家编程摘录 c操作符的优先级 有时一些c操作符有时并不会像你想象的那样工作. 下方表格将说明这个问题: 优先级问题 表达式 期望的情况 实际情况 . 优先级高于* *p.f (*p).f *(p. ...

  6. <<c专家编程>>笔记

    C专家编程摘录 c操作符的优先级 有时一些c操作符有时并不会像你想象的那样工作. 下方表格将说明这个问题: 优先级问题 表达式 期望的情况 实际情况 . 优先级高于* *p.f (*p).f *(p. ...

  7. 《C专家编程》数组和指针并不同--多维数组

    <C专家编程>数组和指针并不同 标签(空格分隔): 程序设计论著笔记 1. 背景理解 1.1 区分定义与声明 p83 声明相当于普通声明:它所说明的并不是自身,而是描写叙述其它地方创建的对 ...

  8. C#高级编程9-第12章 动态语言扩展

    C#高级编程9-第12章 动态语言扩展 dynamic t = new ExpandoObject(); t.Abc = "abc"; t.Value = ; Console.Wr ...

  9. C专家编程

    [C专家编程] 1.如果写了这样一条语句: if(3=i).那么编程器会发出“attempted assignment to literal(试图向常数赋值)”的错误信息. 所以将常量放置在==前央, ...

随机推荐

  1. 第一次Java作业——简单的登录界面

    千里之行,始于足下,从小做起,一点一滴学编程. import javax.swing.*; import java.awt.*; public class Homework{ public stati ...

  2. 在Mac OSX系统的Docker机上启用Docker远程API功能

    在Mac OSX系统的Docker机上启用Docker远程API功能 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs D ...

  3. EOJ 2822 内存显示

    一个 int 类型变量或 double 类型变量在连续几个字节的内存中存放.读取数值时,当数值中包含小数点时类型为 double,否则类型为 int.将读入的数值存放在 int 类型变量或 doubl ...

  4. TCP心跳包

    所谓的心跳包就是客户端定时放送简单的信息给服务器端,告诉它我还在而已.代码就是每 隔几分钟发送一个固定信息给服务器端,服务器端回复一个固定信息.如果服务器端几分钟后没有收到客户端信息则视客户端断开.比 ...

  5. 认识React框架

    在大厂面试的时候被问会不会React框架几乎是必须的,可见React框架在现在前端市场的份额.所以说学习React框架的必要性. react框架起源于Facebook的内部项目,因为对市场上的Java ...

  6. 更换WordPress后台登录地址

    在后台找到wp-content—themes—twentyfifteen(当前的网站主题)—functions.php 在代码的最下面加入以下代码: //后台唯一登录地址 add_action('lo ...

  7. sphinx with discuz

    安装sphinx: sudo apt-get install sphinxsearch 配置: source discuz { type = mysql sql_host = xx.xx.xx.xx ...

  8. NagiosQL安装

        NagiosQL和Nconf是比较好用的Nagios配置工具. 一.安装NagiosQL 1.在服务器终端运行以下命令: ##YUM安装PHP模块yum -y install --disabl ...

  9. 通过nvm 切换 npm 版本

    通过 nvm-windows 更新 npm 1.先安装 nvm-windows .成功后可在命令窗口 输入nvm 查看到 nvm的版本号. 2..在命令窗口输入 nvm list,查看当前使用的 no ...

  10. 传入class、id name 的函数封装

    function chooseDate(idName){ 2 $('#' + idName).click(function(){ //执行函数 4 }); 5 }; 6 //传入的 dataOne 就 ...