免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: liexusong
打印 上一主题 下一主题

应pmerofc的建议, 讨论一下以下问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2011-03-09 19:06 |只看该作者
本帖最后由 liexusong 于 2011-03-09 19:22 编辑
半桶水就别瞎晃了
"hello"肯定不是指针, 更不是什么常量指针
K&R
字符 ...
flw2 发表于 2011-03-09 18:44



    完全支持... 鄙视素质低下的人~

论坛徽章:
0
22 [报告]
发表于 2011-03-09 19:55 |只看该作者
准确来说
  1. char *ptr = &"hello";
复制代码
的写法是不对的
  1. char (*ptr)[6] = &"hello";
复制代码
才是正确的赋值

顺便鄙视下不懂谦卑的人

论坛徽章:
0
23 [报告]
发表于 2011-03-09 20:14 |只看该作者
有必要分那么清吗? 学过汇编的都知道指针只不过是保存了数据的地址而已~ 我从来不理会指针是什么, 我一般都是用汇编的角度去看~ 在汇编中根本就没有指针这个名词, 反而一味用什么C的规范去看才不了解~liexusong 发表于 2011-03-09 17:21



童鞋,你走错方向了,在C/C++与汇编的关系中,汇编所描述的环境仅仅是C/C++高层抽象的实现之一,一个是抽象与标准,另一个是对抽象与标准的实现,在实现这一层次上,高层抽象的语义被剥离,可以这么说,此时已经没有C/C++了,从这个方向去理解C/C++是一个彻底的错误,我们研究汇编的目的之一,是增强对实现机制的了解,但切莫走过头,理解成了“这就是C/C++“。

我举个典型的误解例子,在C++中,常有人说:引用就是指针。由于一般编译器用与指针实现使用的内存地址来实现引用,他们却由此得出了引用就是指针的谬论,实际上引用与指针是完全不同的抽象,这是从汇编理解C/C++导致的典型错误。

论坛徽章:
0
24 [报告]
发表于 2011-03-09 20:53 |只看该作者
回复  liexusong


    指针真的只是地址吗?
你运行一下这个语句,你就知道"Hello"和&"Hello"的区别了 ...
madoldman 发表于 2011-03-09 17:42



    例子很漂亮
    我小小的补充一下
    可以同时考察一下  sizeof "Hello"

论坛徽章:
0
25 [报告]
发表于 2011-03-09 20:53 |只看该作者
童鞋,你走错方向了,在C/C++与汇编的关系中,汇编所描述的环境仅仅是C/C++高层抽象的实现之一,一个是抽象与标准,另一个是对抽象与标准的实现,在实现这一层次上,高层抽象的语义被剥离,可以这么说,此时已经没有C/C++了,从这个方向去理解C/C++是一个彻底的错误,我们研究汇编的目的之一,是增强对实现机制的了解,但切莫走过头,理解成了“这就是C/C++“。

我举个典型的误解例子,在C++中,常有人说:引用就是指针。由于一般编译器用与指针实现使用的内存地址来实现引用,他们却由此得出了引用就是指针的谬论,实际上引用与指针是完全不同的抽象,这是从汇编理解C/C++导致的典型错误。supermegaboy 发表于 2011-03-09 20:14



    很同意

论坛徽章:
0
26 [报告]
发表于 2011-03-09 21:06 |只看该作者

  1. #include <stdio.h>

  2. int main() {
  3.         int array[3];
  4.        
  5.         printf("%p,%p, %p, %p\n", array, &array, array + 1, &array + 1);
  6.         printf("%d, %d\n", sizeof(array), sizeof(&array));
  7.         return 0;
  8. }
复制代码

  1. 打印:
  2. 0x22cd10, 0x22cd10, 0x22cd14, 0x22cd1c
  3. 12, 4
复制代码
按这样的结果看用&操作符取数组的地址的确比较费解, &array + 1会移动整个数组的大小, sizeof(&array) == 4说明是一个指针类型, array + 1移动一个元素大小, sizeof(array)取得整个数组的大小.

论坛徽章:
0
27 [报告]
发表于 2011-03-09 21:29 |只看该作者
几个例子再次说明了指针,指针是指向某地址上一段数据的变量,而地址仅仅就是一个数字,
搭车提问, char *ptr = "hello";这样的表达式是否会在符号表建立一个临时指针?

论坛徽章:
0
28 [报告]
发表于 2011-03-09 21:48 |只看该作者
不好意思,我卖弄一下。也请大家指教
《狂人C》307页

字符串文字量可以视同为一字符数组。比如前面的"ABC"就可以视为一“char [4]”类型的数据。
“char [4]”类型的数据作为左值时表示所占据的内存,作为右值表示一“char *”类型的指针,下面的代码可以证实这点。
程序代码10-1
#include <stdio.h>
#include <stdlib.h>

int main( void )
{
  printf (" sizeof \"ABC\" = %u\n",sizeof "ABC");
  printf (" \"ABC\"      = %p \n &\"ABC\" + 1 = %p\n",
                "ABC"            , & "ABC" + 1 );

  system("PAUSE");       
  return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP