user-0 提问: 指针那一块的问题 缠着了

回复:
user: user-1
content: 最后printf()中指示符类型与变量类型不符~~p为地址值~~%d显示整数型变量

user: user-2
content: 引用 19 楼 my_live_123 的回复:2-是个常值不是常量 4-sizeof的结果是在编译时确定的，是从符号表中直接获取的常值，不是运行时确定的，sizeof s得到是数组的大小。类似p = s在运行时执行的。s的值就是基址。 The sizeof operator yields the size (in bytes) of its operand, which may be an expression or the parenthesized name of a type. The size is determined from the type of the operand. The result is an integer. If the type of the operand is a variable length array type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an integer constant 引用 21 楼 iamshaofa 的回复:这位兄弟说的很到位：sizeof是编译阶段干的事情，编译器是知道数组的大小的。  [quote=引用 19 楼 my_live_123 的回复:] 2-是个常值不是常量 4-sizeof的结果是在编译时确定的，是从符号表中直接获取的常值，不是运行时确定的，sizeof s得到是数组的大小。类似p = s在运行时执行的。s的值就是基址。 The sizeof operator yields the size (in bytes) of its operand, which may be an expression or the parenthesized name of a type. The size is determined from the type of the operand. The result is an integer. If the type of the operand is a variable length array type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an integer constant[/quote]  下次发言要先引用，要不然我不知道你们居然说了这么多话。 引用C标准中的条款，必须要注意的前提是你没有误读标准。 你加红的那句话，并不是说sizeof表达式在编译后不求值，它仅仅是说，求不求值，要分是不是涉及变量长度数组的情况：  void f (int n) {     int a [n];     printf ("%d\n", sizeof a); } 就这个例子而言，如果sizeof a的值是编译时确定，程序的结果还正确？？

user: user-3
content: 求大牛总结。

user: user-4
content: 引用 30 楼 qq_26036375 的回复:我也是醉了  本人  菜鸟一名 %s, 就是输出字符串, 从你指定的地址开始, 遇到\0结束

user: user-5
content: 引用 30 楼 qq_26036375 的回复:我也是醉了  本人  菜鸟一名

user: user-0
content: 我也是醉了  本人  菜鸟一名

user: user-6
content: 2-是个常值不是常量 4-sizeof的结果是在编译时确定的，是从符号表中直接获取的常值，不是运行时确定的，sizeof s得到是数组的大小。类似p = s在运行时执行的。s的值就是基址。 The sizeof operator yields the size (in bytes) of its operand, which may be an expression or the parenthesized name of a type. The size is determined from the type of the operand. The result is an integer. If the type of the operand is a variable length array type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an integer constant

user: user-7
content: 你就是观点比较新奇，但从来不举证。  1. 我问你，你家的内存条是不是按小数寻址的，你不回答 2. 我问你，你家的字节不是8位，你不回答 3. 我问你，我这么书是C++的书，我在C++的书介绍bool类型，有问题吗？你不回答  你这是外星人啊？凌驾于地球人之上啊。

user: user-2
content: 引用 15 楼 iamshaofa 的回复:1. 我的名字是《C/C++学习指南》，你对我起的名字有意见？ 2. 你真是什么都改说啊，你家的byte不是8位啊？这还要确定？你一边玩去吧。  [quote=引用 13 楼 sholber 的回复:] [quote=引用 12 楼 iamshaofa 的回复:] 别装，谢谢，指针不是整数是啥？是一根“针”吗？ pointer to an address 如何表达address呢，它不就是一个整数吗？你难道用一浮点数来表示address？你家的内存条还带小数寻址的？  没人说int赞同于int*，只是说“本质”上一样。有必要来扯构架来抬高自己的“视野”吗？  [quote=引用 11 楼 sholber 的回复:] [quote=引用 7 楼 xihu1364 的回复:] [quote=引用 6 楼 sholber 的回复:] [quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote]  指针的大小就是4个字节，不就是一个int的大小吗？  [/quote]  引用 9 楼 ypzhong 的回复:[quote=引用 6 楼 sholber 的回复:] [quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote] 计算机里所有东西表示都是0 1，这些东西给他加上人为的意义，才是这些01的意义，如果把指针强转(int)那他就是整数值有什么错，灵活应用知识，学习不要太教条。（你惊讶不过是他不符合你的教条（c标准））[/quote]  1，可以明确地说，在有些架构上，指针无法用最长的整数类型容纳； 2，指针和整型不是一回事，别说指针是整数值。 3，指针强转整型，结果是C的实现决定的，而且可能用最长的整型也放不下。 这恐怕不是教条的问题了，是视野的问题。[/quote][/quote]    这是你写的书？ 1个字节只能是8位？？你确定？？ 悲催。[/quote][/quote]  这还只是随便一翻就发现的问题。 你保留你的1字节8位好了。随便你。

user: user-2
content: 引用 14 楼 my_live_123 的回复:[quote=引用 2 楼 sholber 的回复:] [quote=引用 1 楼 my_live_123 的回复:] p = s，p的值是数组s的基地址 %s输出字符数组，遇到null结束输出  不知道大家为啥这么执著于“数组名”，这么说来，一个声明为int类型的标识符，也可以叫“整数名”或者“int名吧”。最奇葩的是数据名还能指向数组地址，一个名字还能指向地址，而且，是指向数组地址还是指向数组首元素的地址？（PS：因为函数类型的表达式叫函数指示符，人家是说“指示”一个函数，可没说指向一个函数，你这数组类型的表达式就直接指向地址了……C标准只是说指示数组类型的表达式不是可修改的左值，又说指示数组类型的表达式在某些条件下可以转换为指向其首元素的指针，可没说它会直接指向数组地址哇） 另外，如果s是数组名，那一个指示数组类型的表达式叫什么： struct t {char a [100];} t; t.a也是数组名吗？毕竟，s和t.a在表达式中可以互换。 指向“基地址”？&s是基地址还情有可原，但&s[0]也是基地址？我觉得基地址这个术语本身就够奇葩……请原谅``你撞枪口上了``早就对数组名这个奇葩不满了……[/quote]  1.数组类型的标示ID-s，这是我认为的”数组名“的含义。 2.数组的标示ID是个常值 3.基地址可以这样称呼，也可以称呼基址！也有称呼首地址的，只是翻译术语的区别。对address翻译成”地址“还是”址“呢？ 4.&s和s是等价的。&s,s,&s[0]的值相等，说基址是可以的，就看你怎么理解了 5.会原谅你的。交流才能出真知。[/quote]  2--常量里没有数组名； 4--sizeof s和s[0]++中的s不同，故&s和s未必等价。 数组名的意义是臆想出来的，我认为。

user: user-7
content: 1. 我的名字是《C/C++学习指南》，你对我起的名字有意见？ 2. 你真是什么都改说啊，你家的byte不是8位啊？这还要确定？你一边玩去吧。  引用 13 楼 sholber 的回复:[quote=引用 12 楼 iamshaofa 的回复:] 别装，谢谢，指针不是整数是啥？是一根“针”吗？ pointer to an address 如何表达address呢，它不就是一个整数吗？你难道用一浮点数来表示address？你家的内存条还带小数寻址的？  没人说int赞同于int*，只是说“本质”上一样。有必要来扯构架来抬高自己的“视野”吗？  [quote=引用 11 楼 sholber 的回复:] [quote=引用 7 楼 xihu1364 的回复:] [quote=引用 6 楼 sholber 的回复:] [quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote]  指针的大小就是4个字节，不就是一个int的大小吗？  [/quote]  引用 9 楼 ypzhong 的回复:[quote=引用 6 楼 sholber 的回复:] [quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote] 计算机里所有东西表示都是0 1，这些东西给他加上人为的意义，才是这些01的意义，如果把指针强转(int)那他就是整数值有什么错，灵活应用知识，学习不要太教条。（你惊讶不过是他不符合你的教条（c标准））[/quote]  1，可以明确地说，在有些架构上，指针无法用最长的整数类型容纳； 2，指针和整型不是一回事，别说指针是整数值。 3，指针强转整型，结果是C的实现决定的，而且可能用最长的整型也放不下。 这恐怕不是教条的问题了，是视野的问题。[/quote][/quote]    这是你写的书？ 1个字节只能是8位？？你确定？？ 悲催。[/quote]

user: user-6
content: 引用 2 楼 sholber 的回复:[quote=引用 1 楼 my_live_123 的回复:] p = s，p的值是数组s的基地址 %s输出字符数组，遇到null结束输出  不知道大家为啥这么执著于“数组名”，这么说来，一个声明为int类型的标识符，也可以叫“整数名”或者“int名吧”。最奇葩的是数据名还能指向数组地址，一个名字还能指向地址，而且，是指向数组地址还是指向数组首元素的地址？（PS：因为函数类型的表达式叫函数指示符，人家是说“指示”一个函数，可没说指向一个函数，你这数组类型的表达式就直接指向地址了……C标准只是说指示数组类型的表达式不是可修改的左值，又说指示数组类型的表达式在某些条件下可以转换为指向其首元素的指针，可没说它会直接指向数组地址哇） 另外，如果s是数组名，那一个指示数组类型的表达式叫什么： struct t {char a [100];} t; t.a也是数组名吗？毕竟，s和t.a在表达式中可以互换。 指向“基地址”？&s是基地址还情有可原，但&s[0]也是基地址？我觉得基地址这个术语本身就够奇葩……请原谅``你撞枪口上了``早就对数组名这个奇葩不满了……[/quote]  1.数组类型的标示ID-s，这是我认为的”数组名“的含义。 2.数组的标示ID是个常值 3.基地址可以这样称呼，也可以称呼基址！也有称呼首地址的，只是翻译术语的区别。对address翻译成”地址“还是”址“呢？ 4.&s和s是等价的。&s,s,&s[0]的值相等，说基址是可以的，就看你怎么理解了 5.会原谅你的。交流才能出真知。

user: user-2
content: 引用 12 楼 iamshaofa 的回复:别装，谢谢，指针不是整数是啥？是一根“针”吗？ pointer to an address 如何表达address呢，它不就是一个整数吗？你难道用一浮点数来表示address？你家的内存条还带小数寻址的？  没人说int赞同于int*，只是说“本质”上一样。有必要来扯构架来抬高自己的“视野”吗？  [quote=引用 11 楼 sholber 的回复:] [quote=引用 7 楼 xihu1364 的回复:] [quote=引用 6 楼 sholber 的回复:] [quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote]  指针的大小就是4个字节，不就是一个int的大小吗？  [/quote]  引用 9 楼 ypzhong 的回复:[quote=引用 6 楼 sholber 的回复:] [quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote] 计算机里所有东西表示都是0 1，这些东西给他加上人为的意义，才是这些01的意义，如果把指针强转(int)那他就是整数值有什么错，灵活应用知识，学习不要太教条。（你惊讶不过是他不符合你的教条（c标准））[/quote]  1，可以明确地说，在有些架构上，指针无法用最长的整数类型容纳； 2，指针和整型不是一回事，别说指针是整数值。 3，指针强转整型，结果是C的实现决定的，而且可能用最长的整型也放不下。 这恐怕不是教条的问题了，是视野的问题。[/quote][/quote]    这是你写的书？ 1个字节只能是8位？？你确定？？ 悲催。

user: user-7
content: 别装，谢谢，指针不是整数是啥？是一根“针”吗？ pointer to an address 如何表达address呢，它不就是一个整数吗？你难道用一浮点数来表示address？你家的内存条还带小数寻址的？  没人说int赞同于int*，只是说“本质”上一样。有必要来扯构架来抬高自己的“视野”吗？  引用 11 楼 sholber 的回复:[quote=引用 7 楼 xihu1364 的回复:] [quote=引用 6 楼 sholber 的回复:] [quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote]  指针的大小就是4个字节，不就是一个int的大小吗？  [/quote]  引用 9 楼 ypzhong 的回复:[quote=引用 6 楼 sholber 的回复:] [quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote] 计算机里所有东西表示都是0 1，这些东西给他加上人为的意义，才是这些01的意义，如果把指针强转(int)那他就是整数值有什么错，灵活应用知识，学习不要太教条。（你惊讶不过是他不符合你的教条（c标准））[/quote]  1，可以明确地说，在有些架构上，指针无法用最长的整数类型容纳； 2，指针和整型不是一回事，别说指针是整数值。 3，指针强转整型，结果是C的实现决定的，而且可能用最长的整型也放不下。 这恐怕不是教条的问题了，是视野的问题。[/quote]

user: user-2
content: 引用 7 楼 xihu1364 的回复:[quote=引用 6 楼 sholber 的回复:] [quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote]  指针的大小就是4个字节，不就是一个int的大小吗？  [/quote]  引用 9 楼 ypzhong 的回复:[quote=引用 6 楼 sholber 的回复:] [quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote] 计算机里所有东西表示都是0 1，这些东西给他加上人为的意义，才是这些01的意义，如果把指针强转(int)那他就是整数值有什么错，灵活应用知识，学习不要太教条。（你惊讶不过是他不符合你的教条（c标准））[/quote]  1，可以明确地说，在有些架构上，指针无法用最长的整数类型容纳； 2，指针和整型不是一回事，别说指针是整数值。 3，指针强转整型，结果是C的实现决定的，而且可能用最长的整型也放不下。 这恐怕不是教条的问题了，是视野的问题。

user: user-7
content: 是他用的书太烂，不怪他。新手如果拿谭浩强的书来看，那绝对是废了，不过这书基本上是垄断了高校市场，可悲。

user: user-8
content: 引用 6 楼 sholber 的回复:[quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote] 计算机里所有东西表示都是0 1，这些东西给他加上人为的意义，才是这些01的意义，如果把指针强转(int)那他就是整数值有什么错，灵活应用知识，学习不要太教条。（你惊讶不过是他不符合你的教条（c标准））

user: user-7
content: 是什么证据啊？  int  m = 10; int* pm = & m; printf("%08X ", pm); printf("%d", pm); printf("%d", &m);  指针就是一个拐钮的叫法，它就是一个内存地址，你有一个1G的内存，每个单元都有一个编号，编号就是地址。不用谢了。我是来宣传我的书的： http://www.afanihao.cn/c_guide/  ，一看就懂。   引用 6 楼 sholber 的回复:[quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote]

user: user-9
content: 引用 6 楼 sholber 的回复:[quote=引用 4 楼 iamshaofa 的回复:] 指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？[/quote]  指针的大小就是4个字节，不就是一个int的大小吗？

user: user-2
content: 引用 4 楼 iamshaofa 的回复:指针就是一个整数值，和int是没有本质区别的。  int  a ; int  b ; a = b; 你懂吧？  PINT  pa = &n; PINT  pb = &m; pa = pb; 你不会不懂吧？  PINT就是int*，就是一种写法。 typedef int*  PINT; OK，你以后就用PINT就明白了。  《C/C++学习指针》，第9章，指针，一看就懂。http://www.afanihao.cn/c_guide/  。不要直接看第9章，谢谢。你得先看第3章和第4章，有铺垫的。  指针是整数值？？真令人惊讶！证据？？