首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手,关于指针有关问题

2012-02-10 
新手求助,关于指针问题看了C++指针方面的解说和使用,但有些还是不太明白,请较一下前靠们:1.指针的赋值:不

新手求助,关于指针问题
看了C++指针方面的解说和使用,但有些还是不太明白,请较一下前靠们:

1.指针的赋值:不要将一个非地址常量、变量以及无意义的实际地址赋给指针变量,如:
    int   *p=(char   *)100;             //上面这句话我理解,这里的(char   *)100强制类型转换是为了使类
                                                          型一致吧,但为什么说100是一个无意义的实际地址呢?最不明白
                                                          就是它为何是一个地址???

2.int   a[10];
    int   *ip=a;                             //这里应该把指针指向数组的初始地址吧???
    int   *ip=&a;                           //错误,地址类型不一致,a的类型是数组,&a是一个数组类型的地
                                                        址(???什么是数组类型的地址???)

[解决办法]
int *p=(char *)100; //不能将一个常数付给指针,因为常数在内存中是一个没有实际意义地址
int a[10];
int *ip=a; //没错,是指向数组的初始地址
int *ip=&a; //不能这么赋值,应改成int *ip=&a[0];
[解决办法]
(???什么是数组类型的地址???)

需要使用 指向数组的指针,
而不是指向 int 的指针:

int (*p2)[10]=&a; //OK
[解决办法]
1 地址都是一个整型数据, 所以 100 可以是一个地址,就是内存中地址编码为 100 的这个字节的内存。

char *p=(char *)100; 的意义就是 p 指向编址为100的这块内存区域,注意指针类型要一致

为什么说100是一个无意义的实际地址,
因为无法得知 100 这个地址是否是可用的,
可能可以用,也可能不行,所以没有实际意义。
【实际上,小地址内存通常都是不可用的】
[解决办法]
最后一个应该这样

int aa[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

int (*p)[10] = &aa;

for (int i = 0; i < 10; i++)
cout < <(*p)[i] < <endl;

热点排行