C/C++语言中的指针和数组我总是理解不了,谁能给我详细讲解一下?

我理解能力太差了,指针和数组我总是搞不清楚该怎么用,谁能给我详细讲解一下?我已经看了大量的例程与课程,就是学不会指针和数组,关键还是理解不了,指针和数组倒底应该怎么用?指向了某地有什么用呢?
还有符号“->”我也搞不清楚是怎么指的。。。

求有耐心的人士认真讲解,我会认真发分的,谢谢各位哥哥姐姐弟弟妹妹了!
还有,我真的很笨,所以。。。你们懂的。。

1. 指针里面存的是地址,比如

int a = 10;
int *p = &a; //此时p这个变量在内存中占4个字节,这四个字节里面存储的是a的地址,比如0xaabbccdd
std::cout << *p << std::endl; // 当你通过*p来访问p的时候,你的编译器会这样理解。从p所存储的4个字节那个地址开始,读取一个int变量,说白了就是从0xaabbccdd这个地址开始,读取一个int数据出来,这个数据就是10啦。

2. 数组,比如

int arr[2] = {0}; // 那么你的内存中出现了连续的两个四节的空间,因为每一个int占用了一个4个字节。这八个字节都存储了0x00000000,也就是十进制的0
// 数据已经在内存里面了,那么我如何访问这个内存地址呢?就是通过arr
std::cout << *(a+1) << std::endl;
std::cout << a[1] << std::endl; //这两个是等价的,虽然他们看起来不同。在编译器来说,都一样。意思就是说,从arr这个地址开始读取第二个字节。

3. 任何数据都是存在内存里面的,不管是普通int,还是数组int。

为了访问这些数据,你需要一个地址,这个地址可以用指针来表示,也可以用数组名来表示,比如上面的arr,其实你的申请的函数,比如void func(), func这名字本身也是一个地址。


4. 对于一个类

class test
{
public:
    void func(){};
};

int main()
{
    test t1;
    t1.func(); // 如果是直接声明,可以使用.来访问。
    test *t_ptr = new t1;
    t_ptr->func(); // 如果通过指针来指向一个内存空间的时候,你就要通过->的方式来调用这个class里面的函数,或者变量了。
}


讲的不好还请多原谅,不要给我分数,我不需要,谢谢。

追问

那t_ptr中的下划线是什么意思?

追答

就是一个名字啦,没什么特别的含义,哈哈。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-26
数组就像楼房里挨着的一个个房间,每个房间里都是有着相同数据类型的数据
访问数组元素的下标就像是门牌号
指针就像是一个路标 指向一个地方
用字符串给指针赋值的意思是把这串字符在内存中的首地址给指针
其实数组名的本质也是一个地址,不过这个地址不允许修改
第2个回答  2013-06-26
首先你要知道一个变量对应一个地址空间,比如a=1,a是一个变量,那a在内存空间里就有一个地址(比如地址为B),就像一个房间,1代表里面的人,B就是门牌号。

然后你应该知道int a是用来定义变量的,那如何来定义地址呢?那就用指针int* a。
意思就是想要得到内容就用变量,想得到这个内容所存放的地址就用指针

再然后用int a定义之后,a就代表内容,用&a来代表a的地址。用int* a定义了指针之后,*a就代表内容,a就变成了地址。

至于数组和指针比较像,比如定义了一个int a[10],那a[0]-a[9]就是内容,这里要注意,这里的a就是整个数组第一个内容a[0]的地址

至于用法用处就比较多了 想更多了解可以追问 或者加Q
第3个回答  2013-06-26
再举个通俗的例子:假设班级举行外出活动,约定把具体活动地点写在教室黑板blackboard上。这时,黑板就是指针变量blackboard,黑板中的内容就是索引地址。同一块黑板变量,可以改编不同的活动地点,也即指向不同的活动地址。而各地址的活动内容要到当地才能知晓,即*blackboard是指针所指向的真正内容。
第4个回答  2013-06-26
去学汇编``分分钟的事情`.追问

汇编。。。

追答

哦对了`我发一张一次调试的`给你看``看你悟性了``


so easy 

真的去学汇编`.要不`你就云里雾里`

追问

是不是学了汇编语言,C/C++的指针和数组就能更快掌握?

追答

必须啊`
一下就懂了`.
想当年`老师说抽屉啊`说`什么乱七八糟的抽象玩意`.打死不明白`就算有一点明白`也都是云里雾里``
当我学了汇编`.我勒个去`.太简单了.!

在说学汇编`以后你要调试`程序``想调试完美的话就直接反汇编来看``so easy!!!

什么指针不指针``什么数组不数组`.
`
说白了都是线性的一条直线空间`.``内存条.而已.
只是指针存放的是一个`地址而已.
`
`

相似回答