C/C++语言中的指针和数组我总是理解不了,谁能给我详细讲解一下?
我理解能力太差了,指针和数组我总是搞不清楚该怎么用,谁能给我详细讲解一下?我已经看了大量的例程与课程,就是学不会指针和数组,关键还是理解不了,指针和数组倒底应该怎么用?指...
我理解能力太差了,指针和数组我总是搞不清楚该怎么用,谁能给我详细讲解一下?我已经看了大量的例程与课程,就是学不会指针和数组,关键还是理解不了,指针和数组倒底应该怎么用?指向了某地有什么用呢?
还有符号“->”我也搞不清楚是怎么指的。。。
求有耐心的人士认真讲解,我会认真发分的,谢谢各位哥哥姐姐弟弟妹妹了!
还有,我真的很笨,所以。。。你们懂的。。 展开
还有符号“->”我也搞不清楚是怎么指的。。。
求有耐心的人士认真讲解,我会认真发分的,谢谢各位哥哥姐姐弟弟妹妹了!
还有,我真的很笨,所以。。。你们懂的。。 展开
5个回答
2013-06-26
展开全部
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中的下划线是什么意思?
追答
就是一个名字啦,没什么特别的含义,哈哈。
展开全部
数组就像楼房里挨着的一个个房间,每个房间里都是有着相同数据类型的数据
访问数组元素的下标就像是门牌号
指针就像是一个路标 指向一个地方
用字符串给指针赋值的意思是把这串字符在内存中的首地址给指针
其实数组名的本质也是一个地址,不过这个地址不允许修改
访问数组元素的下标就像是门牌号
指针就像是一个路标 指向一个地方
用字符串给指针赋值的意思是把这串字符在内存中的首地址给指针
其实数组名的本质也是一个地址,不过这个地址不允许修改
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你要知道一个变量对应一个地址空间,比如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
然后你应该知道int a是用来定义变量的,那如何来定义地址呢?那就用指针int* a。
意思就是想要得到内容就用变量,想得到这个内容所存放的地址就用指针
再然后用int a定义之后,a就代表内容,用&a来代表a的地址。用int* a定义了指针之后,*a就代表内容,a就变成了地址。
至于数组和指针比较像,比如定义了一个int a[10],那a[0]-a[9]就是内容,这里要注意,这里的a就是整个数组第一个内容a[0]的地址
至于用法用处就比较多了 想更多了解可以追问 或者加Q
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
再举个通俗的例子:假设班级举行外出活动,约定把具体活动地点写在教室黑板blackboard上。这时,黑板就是指针变量blackboard,黑板中的内容就是索引地址。同一块黑板变量,可以改编不同的活动地点,也即指向不同的活动地址。而各地址的活动内容要到当地才能知晓,即*blackboard是指针所指向的真正内容。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询