社区
C语言
帖子详情
指针问题!
sharkhuang
2003-11-19 01:38:00
int **p;
p = (int **)malloc(2*3*szieof(int));
如果p = ox1000;
p[1] = ??
...全文
92
39
打赏
收藏
指针问题!
int **p; p = (int **)malloc(2*3*szieof(int)); 如果p = ox1000; p[1] = ??
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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/C++
指针
经典资料大全,十余部经典资料书籍,是您精通C
指针
的理想教程。
C/C++
指针
的13份资料
C/C++
指针
的13份资料 内容丰富,让编程人员不再害怕
指针
深入学习
指针
!!!史上最全
指针
解析!!!!!(2)
传址调⽤,可以让函数和主调函数之间建⽴真正的联系,在函数内部可以修改主调函数中的变量;我们现在要解决的就是当调⽤Swap函数的时候,Swap函数内部操作的就是main函数中的a和b,直接。变量是可以修改的,如果把变量的地址交给⼀个
指针
变量,通过
指针
变量的地址的改变也可以修改这个变量。不能被修改,如果p拿到n的地址就能修改n,这样就打破了const的限制,这是不合理的,所以应该让。NULL 是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址。这就是const的作⽤。
C/C++
指针
详解之基础篇(史上最全最易懂
指针
学习指南!!!!)
目录 一.变量的内存实质到 1.1变量的实质 1.2 赋值给变量 1.3变量在哪里? 二.
指针
是个什么东西? 三. 二级
指针
(
指针
的
指针
) 3.1 定义与初始化 3.2间接数据访问 3.2.1.改变一级
指针
指向 3.2.2改变 N-1 级
指针
的指向 3.2.3二级
指针
的步长 四.
指针
与数组 4.1
指针
与数组名 4.1.1 通过数组名访问数组元素 4....
什么是野
指针
?迷途
指针
!悬空
指针
!
一、迷途
指针
迷途
指针
与野
指针
指的是不指向任何合法的对象的
指针
。 当所指向的对象被释放或者收回,但是对该
指针
没有作任何的修改,以至于该
指针
仍旧指向已经回收的内存地址,此情况下该
指针
便称迷途
指针
。若操作系统将这部分已经释放的内存重新分配给另外一个进程,而原来的程序重新引用现在的迷途
指针
,则将产生无法预料的后果。因为此时迷途
指针
所指向的内存现在包含的已经完全是不同的数据。通常来说,若原来的程序继续
C语言
70,020
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章