鸡啄米
鸡啄米:C++编程入门系列之三十二(数组、指针和字符串:动态内存分配和释放)›评论
-
17. test:
声明指向数组的指针,例子中的代码有点不解:
*(*(p+i)+j)=0 ,是对二维数组中的每个元素进行初始化,
p是指向有3个元素的以为素组 ,那么*(p+i)就是第i个一维数组的具体值了,怎么又在外层加一个*呢?
其次,数组声明为int类型,默认占用4个字节,那么在顺序访问数组元素的时候是否应该是*(p+i*4)呢?
请指教。鸡啄米 于 2012-02-19 22:33:57 回复第一个问题,前面说了“这个语句如果执行成功则返回指向分配内存首地址的指针,但是这个指针不是T类型的指针,而是指向T类型数组的指针。”p是指向有3个元素的一维数组,那么p+i就是指向第i(从0开始)个有3个元素的一维数组的指针,要想获得此一维数组首地址就要通过*(p+i),再通过*(p+i)+j获得此一维数组的第j个元素的地址,取得具体值就要再在前面加*。
第二个问题,数组为int类型的话,p为首地址,p+i就代表了第i个元素,指针会偏移一个int的字节数,p不是字节型指针而是整型指针,不需要用字节运算。2012/2/19 01:57
-
16. 123:
可以这样理解不:当在写程序时,以动态方式生成了一个int a[4]的一维数据,使用时可以使用a[4]或者a[5]之类的吗?即是“动态分配内存”就等价于“不管你声明或者定义了多少内存,在使用过程中根据用户的需要重新分配内存”???鸡啄米 于 2011-11-21 22:28:56 回复sorry,可能我说的还不是很清楚。
比如,我们想定义一个学生学号的数组,但是不知道到底有多少个学生,这个时候我们就可以通过输入确定学生人数,再动态分配此数组的大小。
int n; // 接收输入的大小
int *p; // 动态分配数组的首地址
cin >> n; // 输入学生个数,保存到变量n
p = new int[n]; //动态分配
这样就可以根据程序运行情况分配内存了。之后p[0],p[1]等元素就可以正常使用了,只要没有越界。
由 鸡啄米 于 2011-11-21 22:31:30 最后编辑2011/11/21 14:22
-
15. 123:
看完这一节,好像没有体会到动态分配内存的优势啊???鸡啄米 于 2011-11-21 22:31:07 回复动态内存分配的优势就在于,不会造成内存浪费,也不会越界。实现按需分配内存。123 于 2011-11-22 09:27:38 回复动态分配内存的优势中有一点是“不会越界”,但是下面的答复中又出现“只要没有越界”呢?鸡啄米 于 2011-11-22 16:51:50 回复哦,“不会越界”的表述不太准确,应该是不会浪费内存,也不会少于所需的内存空间。谢谢来此认真学习的这位朋友,谢谢支持!123 于 2011-11-23 12:47:07 回复恩,说实话,我感觉还是模模糊糊的!之前是学通信的,没有接受专业的编程开发方面的学习,理解起来比较慢。鸡啄米 于 2011-11-23 22:52:42 回复没关系,什么专业的都有做编程的。我是自动化的,我身边还有数学的,通信的,电信的,都做的挺好的。一定要有自信哦。2011/11/21 14:13
-
14. 菲都狄都:
对C++这东西 看不懂!!!!!!!!!2011/11/19 14:47
-
13. 安川伺服电机:
似懂非懂2011/11/17 23:09
发表评论