社区
C语言
帖子详情
指针问题!
sharkhuang
2003-11-19 01:38:00
int **p;
p = (int **)malloc(2*3*szieof(int));
如果p = ox1000;
p[1] = ??
...全文
134
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,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章