C专家编程之为什么C语言把数组形參当做指针:数组/指针实參
#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语言把数组形參当做指针:数组/指针实參的更多相关文章
- 【c专家编程】分析c语言的声明
联合: 在结构中,每个成员依次存储,而在联合中,所有成员都从偏移地址零开始存储,联合一般被用来节省空间,用法和struct相同. union bits32_tag { int whole; // 一个 ...
- C语言学习书籍推荐《C专家编程Expert C Programming Deep C Secrets》下载
Peter Van Der Linden (作者) <C和C++经典著作 C专家编程Expert C Programming Deep C Secrets>展示了C程序员所使用的编码技巧, ...
- 《C专家编程》第三章——分析C语言的声明
前面一章我们已经说过C语言存在的一些问题和它晦涩的地方,让我们对这门神奇的语言有了更深的了解.现在这一章则集中精力来讨论C语言的声明,分为三块,首先是说明C语言声明晦涩难懂的原因和声明是如何形成的,其 ...
- C专家编程阅读笔记
周末闲来无事,(哗),好久之前买的C专家编程一直没看,翻起来看了一下 尽量不使用unsigned 尽量不要在代码中使用unsigned,尤其是一些看起来是无符号类型的数字,比如年龄等,因为难免要使用u ...
- c专家编程摘录
C专家编程摘录 c操作符的优先级 有时一些c操作符有时并不会像你想象的那样工作. 下方表格将说明这个问题: 优先级问题 表达式 期望的情况 实际情况 . 优先级高于* *p.f (*p).f *(p. ...
- <<c专家编程>>笔记
C专家编程摘录 c操作符的优先级 有时一些c操作符有时并不会像你想象的那样工作. 下方表格将说明这个问题: 优先级问题 表达式 期望的情况 实际情况 . 优先级高于* *p.f (*p).f *(p. ...
- 《C专家编程》数组和指针并不同--多维数组
<C专家编程>数组和指针并不同 标签(空格分隔): 程序设计论著笔记 1. 背景理解 1.1 区分定义与声明 p83 声明相当于普通声明:它所说明的并不是自身,而是描写叙述其它地方创建的对 ...
- C#高级编程9-第12章 动态语言扩展
C#高级编程9-第12章 动态语言扩展 dynamic t = new ExpandoObject(); t.Abc = "abc"; t.Value = ; Console.Wr ...
- C专家编程
[C专家编程] 1.如果写了这样一条语句: if(3=i).那么编程器会发出“attempted assignment to literal(试图向常数赋值)”的错误信息. 所以将常量放置在==前央, ...
随机推荐
- 总结一下这几节Java课的...重点!!!
1.定义一个Person类,包含两个私有的属性(name.age).一个含参的方法setValue(int age,String name).一个不含参方法setValue()和一个普通方法tell( ...
- 面向对象的三大特性之二——继承(含super的使用)
1.继承的语法:class 子类 extends 父类 例1: class Person { int age; String name; public void print1() { System.o ...
- 一个php+jquery+json+ajax实例
json.php <!DOCTYPE html Public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- vcpkg错误分析方法
最近在使用vcpkg时,经常会碰到CMake错误. 有些以前能编译通过的包, 过一段时间又不能编译错误了. 错误提示一般是CMake错误, 弄得很郁闷. 我采用以下步骤解决了问题: 分析错误 查看错误 ...
- 第4章 部署模式 Three-Tiered Distribution(三级分布)
影响因素 Tiered Distribution 中讨论的影响因素也适用于此模式.有关这些通用影响因素的讨论,请参阅"Tiered Distribution".下列影响因素仅适用于 ...
- 整理Py小demo
from email.mime.text import MIMEText # 第一个参数就是邮件正文,第二个参数是MIME的subtype, # 传入'plain'表示纯文本,最终的MIME就是'te ...
- ACM_____不再爱你……
不再爱你…… 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在有一个圆柱形水杯,里面装满了水,在它的底部有一个小洞,通过一些简单的物理知识我们可以知道: 1.由于重力 ...
- Swift 字典 Dictionary基本用法
import UIKit /* 字典的介绍 1.字典允许按照某个键访问元素 2.字典是由两部分组成, 一个键(key)集合, 一个是值(value)集合 3.键集合是不能有重复的元素, 值集合可以有重 ...
- JS 公鸡2文一只、母鸡1文一只、小鸡0.5文一只若一共有100文钱买100只鸡有多少种方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 强大的JQuery链式操作风格
实例代码 <style type="text/css"> #menu {width: 300px;} .has_children {background:#555;co ...