这些天我正在学习C编程语言.我有一个关于指针的问题.
教科书说指针存储内存地址,使用printf("%p",pointer)我们可以显示这个指针在我们的内存中指向的位置.
但每个指针都有一个类型,如int *pointer,long *p等等.int *pointer表示"p是指向int的指针".
我的问题,如果我们写
int *p,i;
p=&i;
*p=99;
Run Code Online (Sandbox Code Playgroud)
如果指针只包含地址信息,程序怎么知道应该用多少位数来存储整数99?因为整数可以是16位int或32位long.
所以我想知道内存中的int指针是否不仅存储地址信息,还存储类型信息?
小智 5
因为整数可以是16位
int或32位long.
一个整数可以,但一个int不能.无论您的环境中有多大,它的大小都是一成不变的(在该环境中)并且在运行时不会发生变化.一个int *只能指向一个int,而不是一个long.请注意,如果出现任何此类问题,它们会同int x;等地影响.
所以指针实际上只存储内存地址.有关指针对象大小的信息在类型中(就像非指针变量的类型告诉编译器该变量有多大).