社区
C语言
帖子详情
指针问题!
sharkhuang
2003-11-19 01:38:00
int **p;
p = (int **)malloc(2*3*szieof(int));
如果p = ox1000;
p[1] = ??
...全文
143
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语言中各种
指针
用法的区别,包括
指针
变量、
指针
数组、指向数组的
指针
及指向函数的
指针
。并通过具体实例展示了如何定义和使用这些复杂的
指针
类型。
请教!
指针
问题
本文探讨了在MyBatis中查询空表时出现的空
指针
异常
问题
,提供了解决方案,包括使用ifnull()函数或更改resultType为String,并讨论了如何在更复杂的结果类型如User类中应用这些解决方案。
指针
的
问题
!
博客涉及编译器、basic语言等信息技术内容,还提及float存储等方面,但具体内容缺失,推测围绕这些信息技术元素展开相关讨论。
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章