|
|
|
|
 C语言中指针的这个用法正确吗?(面试题目!) - rubble_stone [ 2005-09-29 16:49 | 208 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - sportstiger [ 2005-10-10 21:28 | 848 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - alula [ 2005-10-11 09:26 | 649 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - zhllg [ 2005-10-10 23:29 | 269 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - jianliang79 [ 2005-10-07 19:14 | 405 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - coldwind [ 2005-10-10 17:29 | 104 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - jianliang79 [ 2005-10-10 19:41 | 131 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - rfuture [ 2005-10-07 18:56 | 52 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - freelance [ 2005-10-07 11:43 | 702 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - coly [ 2005-09-30 23:27 | 114 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - x911 [ 2005-09-29 19:52 | 49 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - Atu [ 2005-10-07 14:15 | 159 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - zql520 [ 2005-09-30 20:06 | 30 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - LockTime [ 2005-10-10 10:50 | 879 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - z_york [ 2005-10-10 11:18 | 259 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - LockTime [ 2005-10-10 11:48 | 134 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - zhllg [ 2005-10-10 12:27 | 219 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - LockTime [ 2005-10-10 12:47 | 100 byte(s)]
 Re: C语言中指针的这个用法正确吗?(面试题目!) - Atu [ 2005-09-29 17:13 | 191 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
#include <stdio.h>
int main(void) {
int **p;
int arr[100];
p = &arr;
return 0;
}
|
|
[Original]
[Print]
[Top]
|
|
[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]
|
|
[Original]
[Print]
[Top]
|
有意思:)
我觉得向下面这样的写法:
int **p;
int arr[100];
p = &arr;
编译器应该报错比较合理,因为arr本身不是一个变量,他不应该接受取地址(&)操作符。但我刚才把这段代码编译之后再反汇编发现就跟前面coly大侠说得一样,&arr和arr本身的值是一样的,也就是说p所指向的地址就是&arr[0],也就是在堆栈中为arr数组所分配的空间的首地址。
|
|
|
[Original]
[Print]
[Top]
|
|
[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]
|
|
[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]
|
|
[Original]
[Print]
[Top]
|
哦! 明白了!谢谢,
还有一点不明白 char *str = "aaa"; 和 char *s; s = "aaa"; 等价么?
|
|
----
珍惜时间,留住今天.
|
|
[Original]
[Print]
[Top]
|
|
[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]
|
|
[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]
|
|
[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]
|
|
|