char a[]和char *a 的不同
来源:互联网 发布:牙签弩淘宝暗语 编辑:程序博客网 时间:2024/05/16 01:41
sizeof 的结果是不一样的。
数组是直接访问内存。
指针是间接访问内存。
当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针.
并非如此。(你所听说的应该跟函数的形式参数有关) 数组不是指针。 数组定义 char a[6] 请求预留 6 个字符的位置, 并用名称 ``a" 表示。也就是说, 有一个称为 ``a" 的位置, 可以放入 6 个字符。 而指针申明 char *p, 请求一个位置放置一个指针, 用名称 ``p" 表示。 这个指针几乎可以指向任何位置: 任何字符和任何连续的字符, 或者哪里也不指。
一个图形胜过千言万语。声明
char a[] = "hello"; char *p = "world";
将会初始化下图所示的数据结果:
+---+---+---+---+---+---+ a: | h | e | l | l | o |/0 | +---+---+---+---+---+---+ +-----+ +---+---+---+---+---+---+ p: | *======> | w | o | r | l | d |/0 | +-----+ +---+---+---+---+---+---+
根据 x 是数组还是指针, 类似 x[3] 这样的引用会生成不同的代码。认识到这一点大有裨益。以上面的声明为例, 当编译器看到表达式 a[3] 的时候, 它生成代码从 a 的位置开始跳过 3 个, 然后取出那个字符. 如果它看到 p[3], 它生成代码找到 ``p" 的位置, 取出其中的指针值, 在指针上加 3 然后取出指向的字符。换言之, a[3] 是 名为 a 的对象 (的起始位置) 之后 3 个位置的值, 而 p[3] 是 p 指向的对象的 3 个位置之后的值. 在上例中, a[3] 和 p[3] 碰巧都是 'l' , 但是编译器到达那里的途径不尽相同。本质的区别在于类似 a 的数组和类似 p 的指针一旦在表达式中出现就会按照不同的方法计算, 不论它们是否有下标。
- char a[]和char *a 的不同
- char* a和 char a[]的区别
- char* a和char a[]的区别
- char* a 和char a[]的区别
- char* a和char a[]的区别
- char* a和char a[]的区别
- char* a和char a[]的区别
- char *a 和char a[] 的区别
- char *a 和char a[]的区别
- char* a和char a[]的区别
- char a[]和char* a
- char a[] 和 char *a
- char a[] 和char *a
- char *a和 char a[]
- c中有关char *p 和char a[6] ,char a[] char a[0] 的区别
- 如何理解指针和数组char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][]
- char *b和char a[]
- 深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别
- VIM学习
- Login控件:用户登录失败的消息提示。
- STL之vector容器(补充)
- Web应用中基于组的用户权限管理在Spring框架下的实现
- 收藏股市术语
- char a[]和char *a 的不同
- 正则表达式
- 测量机ETH部分培训
- Eclipse3.2.1 + MyEclipse5.1下配置websphere6.1并进行实时调试
- 2.14晴 情人节
- Professional
- 保健常识
- csdn差不多的验证码。
- .NET Micro Framework初体验(二)