小甲鱼关于《带你学C带你飞》教程第三十九期视频最后一个有趣问题
这是我的代码!#include<stdio.h>
int main()
{
char a=0,b=0;
int *p=(int *)&b;
printf("首先\na:%d b:%d\n",a,b);
printf("a:%p b:%p p:%p\n",&a,&b,p);
*p=258;
printf("之后\na:%d b:%d\n",a,b);
printf("a:%p b:%p p:%p\n",&a,&b,p);
return 0;
}
这是我显示的结果!
首先
a:0 b:0
a:000000000062FE17 b:000000000062FE16 p:000000000062FE16
之后
a:1 b:2
a:000000000062FE17 b:000000000062FE16 p:0000000000620000
那么好了!请问各位大神为什么在使*p=258之后,p会发生改变呢? 本帖最后由 qiuyouzhi 于 2020-3-12 18:22 编辑
指针指向的是地址,不是数据啊。。。
再说了,你给p赋了一个新的值,地址不改才怪 qiuyouzhi 发表于 2020-3-12 18:17
指针指向的是地址,不是数据啊。。。
再说了,你给p赋了一个新的值,地址不改才怪
难道不是我赋值改的是p这个地址下的数值吗? 小芮爱编程丫 发表于 2020-3-12 18:43
难道不是我赋值改的是p这个地址下的数值吗?
。。。
你得改两次
一次改原变量,一次改指针指向的地址 qiuyouzhi 发表于 2020-3-12 18:45
。。。
你得改两次
一次改原变量,一次改指针指向的地址
不好意思我还是没有明白{:5_100:}
*p=258这句难道不是改变的p地址所指对象的值吗?
p这个地址不是始终都是b这个变量对应地址(拓宽到四个字节)吗? 小芮爱编程丫 发表于 2020-3-12 19:00
不好意思我还是没有明白
*p=258这句难道不是改变的p地址所指对象的值吗?
p这个地址不是始终 ...
不是的,它只会改自己
要不然你真想改*p的时候就蒙了
qiuyouzhi 发表于 2020-3-12 19:02
不是的,它只会改自己
要不然你真想改*p的时候就蒙了
可是*p对应的确是改变了吧,要不后来怎么a=1,b=2了呢? 小芮爱编程丫 发表于 2020-3-12 19:06
可是*p对应的确是改变了吧,要不后来怎么a=1,b=2了呢?
哦哦哦,抱歉,说错了
你把char改成int才能看出效果 qiuyouzhi 发表于 2020-3-12 19:09
哦哦哦,抱歉,说错了
你把char改成int才能看出效果
so能不能再说一下p这个地址改变的原因,说了这么多条我更乱了{:5_100:} {:5_109:}插个眼,等待大神降临 解答 编译器正好把变量p放在了变量b的后面
#include<stdio.h>
int main()
{
char a=0,b=0;
int *p=(int *)&b;
printf("首先\na:%d b:%d\n",a,b);
printf("a:%p b:%p p:%p\n",&a,&b,p);
//*p=258;
*p=0x12345678;
printf("之后\na:%d b:%d\n",a,b);
printf("a:%p b:%p p:%p\n",&a,&b,p);
return 0;
}
首先
a:0 b:0
a:0xffffcc17 b:0xffffcc16 p:0xffffcc16
之后
a:86 b:120
a:0xffffcc17 b:0xffffcc16 p:0xffff1234
这个1234就是这句导致的
*p=0x12345678;
#include<stdio.h>
int main()
{
char a=0,b=0;
int *p=(int *)&b;
printf("首先\na:%d b:%d\n",a,b);
printf("a:%p b:%p p:%p\n",&a,&b,p);
//*p=258;
*p=0xabcd5678;
printf("之后\na:%d b:%d\n",a,b);
printf("a:%p b:%p p:%p\n",&a,&b,p);
return 0;
}
首先
a:0 b:0
a:0xffffcc17 b:0xffffcc16 p:0xffffcc16
之后
a:86 b:120
a:0xffffcc17 b:0xffffcc16 p:0xffffabcd
变成abcd了
页:
[1]