社区
C语言
帖子详情
指针问题!
sharkhuang
2003-11-19 01:38:00
int **p;
p = (int **)malloc(2*3*szieof(int));
如果p = ox1000;
p[1] = ??
...全文
131
39
打赏
收藏
指针问题!
int **p; p = (int **)malloc(2*3*szieof(int)); 如果p = ox1000; p[1] = ??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
39 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sharkhuang
2003-11-23
打赏
举报
回复
越来越对了!容易懂了
GR
2003-11-22
打赏
举报
回复
这两种本质都是一样的。也就是p的值为开辟内存区的首地址。p[1]就是开辟内存区的第二个地址的值,就如楼上的所说只是初始化和未初始化的区别
RainWindy
2003-11-22
打赏
举报
回复
第二个问题如大家所说,我只谈第一个问题:
我经过debug得出以下结果
p=0x1000,
则p[1]的地址(等同于p+1)是0x1004,因为int*为4个字节(在VC下,如果使用16位编译,则为0x1002)
2*3*sizeof(int)=24个字节,也就是[0x1000,0x1017]为有效地址,所以p[1]是指向了有效地址,但p[1]只是0x1004指针处4个字节的值,由于malloc分配内存时不会初始化,所以p[1]是随机的,
但如果改成p = (int **)calloc(2*3,szieof(int));
则在内存区[0x1000,0x1017]的值是全为0,所以这时候p[1]=0,请大家再去调试,就是这个结果。
sharkhuang
2003-11-22
打赏
举报
回复
继续啊!
Rossonero
2003-11-21
打赏
举报
回复
从2*3*szieof(int)看不出是2维的,只是分配后强制转换了.
因此和int *t=malloc()没本质的区别.
这里只是用t访问变量单元,而楼主是用(*p)访问而已.
skylucker
2003-11-21
打赏
举报
回复
malloc 和 new是不是一个意思?那个地方还成new是不是一样?
GR
2003-11-21
打赏
举报
回复
不管怎么变。N维也好。最终是化为一维,给了一个指针之后。指针就可以全盘访问了。
cyj2008
2003-11-21
打赏
举报
回复
p[1]=0x100c
coppermine
2003-11-21
打赏
举报
回复
友一个例子
#include <iostream.h>
void main()
{
int a[4] = {1,2,3,4};
int **********pp = (int**********)a; // 无论多少个*,结果都一样
for (int i=0; i<4; i++) cout<<(int)(pp[i])<<endl;
}
和前面的比较一下,因该可以看得出其本质了吧。
GR
2003-11-21
打赏
举报
回复
靠。是我错了。p[1]是a[0][1]的值。
coolduckplus
2003-11-21
打赏
举报
回复
学习
GR
2003-11-21
打赏
举报
回复
又仔细看了一下。p[1]是a[0][1]的地址。
sharkhuang
2003-11-21
打赏
举报
回复
呵呵!你是一位的用法!只是强行转换了而已!
你的PP如果是双指针!那要打他的值其实是 *pp【1】;又是乱东西!
GR
2003-11-20
打赏
举报
回复
p[1]根本无法回答的。只是一个中间量而已。无法用具体数值描述的。
sharkhuang
2003-11-20
打赏
举报
回复
凡是回答 p【1】是一堆垃圾的人都是对的!而且是把指针吃透了的!:)
coppermine
2003-11-20
打赏
举报
回复
to sharkhuang(爱情和程序都读不懂) 我的结论和你正相反,呵呵.
一个例子
#include <iostream.h>
void main()
{
int a[4] = {1,2,3,4};
int **pp = (int**)a;
for (int i=0; i<4; i++) cout<<(int)(pp[i])<<endl;
}
kyle245
2003-11-19
打赏
举报
回复
malloc(2*3*szieof(int));与malloc(6*szieof(int));没区别吧?
coppermine
2003-11-19
打赏
举报
回复
注意,设 T *p, 那么p[i] == *(T*)((BYTE*)p + sizeof(T))
该例中,T为一个指针,sizeof(T)==4;
一个容易混淆的地方是,这里没有数组的概念。指针指向数组的例子:
char *p = a[N];
char (*p)[N] = a[X][N]; X--为任意值,N为定值 p[a1][b] == a[a1][b];
高维数组类推。
C语言不检查数组是否越界,所以当把数组付给指针时,第一维的大小时没有用的。但其它维的信息是必需的,因为指针运算需要他们。
xdhust
2003-11-19
打赏
举报
回复
未初始化的值
warm_hcb
2003-11-19
打赏
举报
回复
还是我哥哥牛,一下指出p[1]表示的是a[0][1]的值。
p[1] = *(p+1),p指向的是一个(int*)的指针,
所以p+1表示指针向前移动4个字节,然后再取值,
因为p表示的是a[0][0]的地址,而数组是int型,所以p+1表示的是a[0][1]的地址,
*(p+1)就表示a[0][1]的值。
加载更多回复(19)
C/C++
指针
经典资料大全
- C++11引入了智能
指针
(如`unique_ptr`,`shared_ptr`,`weak_ptr`),自动管理内存,避免手动释放带来的
问题
。 8. **
指针
与STL** - 标准模板库(STL)中的容器如`vector`,`list`,`map`等,经常与
指针
结合使用...
C/C++
指针
的13份资料
13. **
指针
的安全性**:在使用
指针
时,要避免未初始化的
指针
、空
指针
解引用、越界访问以及悬挂
指针
等
问题
,确保程序的健壮性。 通过深入学习这13份资料,你将能够掌握C/C++
指针
的精髓,无论是进行底层编程、优化...
关于
指针
问题
!
我有个关于
指针
的
问题
弄不明白,就是说
指针
的内容是地址!而
指针
指向别的变量,在该变量释放后,该
指针
的地址内容是什么?谁能给我弄明白关于
指针
的具体
问题
!我将非常感谢!
什么是野
指针
?迷途
指针
!悬空
指针
!
一、迷途
指针
迷途
指针
与野
指针
指的是不指向任何合法的对象的
指针
。 当所指向的对象被释放或者收回,但是对该
指针
没有作任何的修改,以至于该
指针
仍旧指向已经回收的内存地址,此情况下该
指针
便称迷途
指针
。若操作...
C++中的野
指针
问题
1 C和C++中的野
指针
问题
1.1 野
指针
的概念 1.2 野
指针
的由来 1.3 杜绝野
指针
的基本原则 2 C和C++中的常见内存错误 2.1 常见内存错误 2.2 内存操作的基本规则 1 C和C++中的野
指针
问题
1.1 野
指针
的概念 野
指针
的概念...
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章