- UID
- 60654
注册时间2009-4-1
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 开心 前天 12:41 |
---|
签到天数: 683 天 [LV.9]以坛为家II
|
今天刚看了第六课的视频,有这么一个程序
main()
{
void *a;
a=(void *)malloc(4);
scanf("%d %d",(int *)a,(int *)a+1);
printf("%d",*((int *)a) + *((int *)a+1));
}
老大刚开始打成了(int *)&a
a是开出的4个空间的首地址,而&a应该是指针变量a的地址,即&a这个地址里放的是4个空间的首地址,也就是说也可以用指针的4个字节的空间
main()
{
void *a;
a=(void *)malloc(4);
scanf("%d %d",(int *)&a,(int *)&a+1);
printf("%d",*((int *)&a) + *((int *)&a+1));
}
第二段代码是把两个输入存放在了指针变量的4个空间里了,而不是指针变量所指的动态开出来的4个空间里
可对前面课程的一个程序
#define H strlen(a)
main()
{
char *a="ChinaPYG!";
int *b=0;
for( ; *((char *)&b+1) < H ; (*((char *)&b+1))++)
printf("%c",*(a + *((char *)&b+1)));
}
其中的&b同样应该是指针b的4个空间
这里假设段地址也为1000
即*((char *)&b+1)应该是2001里的内容 3(实际情况可能不同,但不一定是0)
当是3时,输出的字符是从*(a+3)开始的
可实际情况是程序输出正确,但我去掉所有的&时,总是从第2个字符开始输出,而我认理解为(char *)b才是0所在空间的第一个空间
不知道我哪里理解错了,请老大和各位纠正一下! |
|