URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 24 » C语言中指针的这个用法正确吗?(面试题目!)
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
C语言中指针的这个用法正确吗?(面试题目!)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Subject: C语言中指针的这个用法正确吗?(面试题目!)
Author: rubble_stone    Posted: 2005-09-29 16:49    Length: 208 byte(s)
[Original] [Print] [Top]
#include <stdio.h>

int main(void) {

int **p;
int arr[100];

p = &arr;

return 0;
}
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: Atu    Posted: 2005-09-29 17:13    Length: 191 byte(s)
[Original] [Print] [Top]
不对。

p是指向指针的指针。
它的合理用法是:
int *q;
p = &q;

或者说
int *arr[100];
p = arr;
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: x911    Posted: 2005-09-29 19:52    Length: 49 byte(s)
[Original] [Print] [Top]
我觉得是正确的,什么指向指针的指针,那还不是指针吗!
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: zql520    Posted: 2005-09-30 20:06    Length: 30 byte(s)
[Original] [Print] [Top]
不行,我试过了啊,出现段错误。
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: coly    Posted: 2005-09-30 23:27    Length: 114 byte(s)
[Original] [Print] [Top]
这里比较特殊啦,你可以试试的。
arr和&arr的地址是一样的。所以p不能用&arr得到想要的东东了。
----
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: freelance    Posted: 2005-10-07 11:43    Length: 702 byte(s)
[Original] [Print] [Top]
#include <iostream>
using namespace std;

int main()
{
int value[100];
int *array[100];
int **pointpoint;
pointpoint = array;
//在创建了一个指针指针的时候,好像都用一个指针数组赋值
//否则,你建它干吗?我不知道。
//如果没有赋值,那么pointpoint[?]就没有实际的地址,
//你也就不能对它操作,谁知道它指到哪儿去了?
array[2] = value;
value[0] = 100;
cout<<*pointpoint[2]<<" ?= "<<100<<endl;//谁知道等不等?

return 0;
}
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: Atu    Posted: 2005-10-07 14:15    Length: 159 byte(s)
[Original] [Print] [Top]
> 我觉得是正确的,什么指向指针的指针,那还不是指针吗!

不懂就不要乱说了
指向指针的指针,和指向整数的指针,能一样吗?
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: rfuture    Posted: 2005-10-07 18:56    Length: 52 byte(s)
[Original] [Print] [Top]
p = &arr;

应该是 p = arr;
----
one:study! two:study! three:study!
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: jianliang79    Posted: 2005-10-07 19:14    Length: 405 byte(s)
[Original] [Print] [Top]
有意思:)
我觉得向下面这样的写法:
int **p;
int arr[100];

p = &arr;
编译器应该报错比较合理,因为arr本身不是一个变量,他不应该接受取地址(&)操作符。但我刚才把这段代码编译之后再反汇编发现就跟前面coly大侠说得一样,&arr和arr本身的值是一样的,也就是说p所指向的地址就是&arr[0],也就是在堆栈中为arr数组所分配的空间的首地址。
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: LockTime    Posted: 2005-10-10 10:50    Length: 879 byte(s)
[Original] [Print] [Top]
#include <stdio.h>

int main ()
{
int **p;
int i;
int arr[10];

p = arr;

for (i = 0; i < 10; i++)
arr[i] = i;
for (i = 0; i < 10; i++)
printf ("%d ", p[i]); //p[i] 应该是指针呀!怎么可以打印出值?
}

另外,还有一点不明白 如下

int main ()
{
 int *p;
char *str;

p = 9;
str = "aaa";
printf ("%d ", p);
printf ("%s ", str);

}
p和str都是指针变量。并没有指向某个地址。p = 9;str = "aaa"; 我认为这是非法操作。 但是可以打印出来。 实在不明白。

----
珍惜时间,留住今天.
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: z_york    Posted: 2005-10-10 11:18    Length: 259 byte(s)
[Original] [Print] [Top]
回楼上。
int *p;
p = 9;

printf("%d ", p); // 输出9
没有问题,把地址值当整数输出,并没有到9这个地址取值,不是非法操作。

printf("%d ", *p);
这样才会有问题。
----
I love David Beckham and Man.Utd. for ever.
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: LockTime    Posted: 2005-10-10 11:48    Length: 134 byte(s)
[Original] [Print] [Top]
哦! 明白了!谢谢, 
还有一点不明白 char *str = "aaa"; 和 char *s; s = "aaa"; 等价么? 
----
珍惜时间,留住今天.
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: zhllg    Posted: 2005-10-10 12:27    Length: 219 byte(s)
[Original] [Print] [Top]
why not?

s = "aaa";

equals

assign s a value
this value is a memory address
this address is the start address of string "aaa"
----
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: LockTime    Posted: 2005-10-10 12:47    Length: 100 byte(s)
[Original] [Print] [Top]
Thanks a lot
----
珍惜时间,留住今天.
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: coldwind    Posted: 2005-10-10 17:29    Length: 104 byte(s)
[Original] [Print] [Top]
>但我刚才把这段代码编译之后再反汇编发现就跟前面coly大侠说得一样

干吗要反汇编?
----
Jim Zeus
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: jianliang79    Posted: 2005-10-10 19:41    Length: 131 byte(s)
[Original] [Print] [Top]
其实不需要反汇编,只是我对gdb使用得不是很熟,不是很清楚怎么看symbol的值,所以干脆用disass命令看汇编代码来得倒是更快一点。见笑了:)
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: sportstiger    Posted: 2005-10-10 21:28    Length: 848 byte(s)
[Original] [Print] [Top]
#include <stdio.h>

int main(void) {

int **p;
int arr[100];

p = &arr;

return 0;
}
既然&arr也只是arr数组第一个元素的地址,冒出一个想法:可不可取&(&arr)?
不行,为什么?
原因:每个变量只和两个值相关联:
1 它的数据值,存储在某个内存地址,这个值也被称为对象的右值
2 它的地址值,即存储数据值的那块内存的地址,它也被称为变量的左值
原来如此,所以不能取&(&arr),嘿嘿
那这样应该可以吧:
#include <stdio.h>

int main(void) {

int **pointP;
int *p;
int arr[100];

p = &arr;
pointP=&p;
return 0;
}
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: zhllg    Posted: 2005-10-10 23:29    Length: 269 byte(s)
[Original] [Print] [Top]
你理解的基本正确
不过有个基本概念问题

可以取其地址的值是左值
任何值都可以为右值

http://en.wikipedia.org/wiki/Lvalue
----
[Original] [Print] [Top]
Subject: Re: C语言中指针的这个用法正确吗?(面试题目!)
Author: alula    Posted: 2005-10-11 09:26    Length: 649 byte(s)
[Original] [Print] [Top]
对于数组
int arr[100];

在强类型的角度看,arr 始终是代表数组 int()[100] 这个整体。所以获取数组第一个元素地址的方法,以
&arr[0]
最为准确(<the c programming language>在讲解数组时候最开始的用法也是这个)。

int* p = arr;
可以这么书写,是因为自动类型转换(因为我们需要实用)。

&arr
建议不要用 &arr获取第一个元素的地址。在强类型的角度看,这个表达式的类型是 int (*)[100]。用C++编译,不一定能通过。另外,当我们混用指针和数组的时候,arr, &arr[0] 都比&arr要准确。



----
温故知新
[Original] [Print] [Top]
« Previous thread
Linux 下面有没类似win95的debug 的调试工具啊?
C/C++编程版
24
Next thread »
关于单步调试工具
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:52:35, cost 0.082762002944946 ms.