标签:
(1)是地址
首先明白一个观点:指针就是地址。这是理解指针的起始一步。
直观感受下。变量的地址
int main() { int foo; int *foo_p; foo = 5; foo_p = &foo; printf(" foo...%d\n", foo); printf("*foo_p...%d\n", *foo_p); printf(" &foo...%p\n", &foo); printf(" foo_p...%p\n", foo_p); printf("&foo_p...%p\n", &foo_p); return 0; }执行
几点说明:
%p:用合适的方式(通常是十六进制)输出指针变量中存放的还有一个变量的地址;%x:用十六进制的方式打印出变量的值。而且在我的环境中使用%x打印指针变量的话,会省略前面的0。
int main() { int foo = 5; int *foo_p = &foo; int **foo_pp = &foo_p; printf(" foo...%d\n", foo); printf(" &foo...%p\n", &foo); printf(" foo_p...%p\n", foo_p); printf(" &foo_p...%p\n", &foo_p); printf(" *foo_p...%d\n", *foo_p); printf(" foo_pp...%p\n", foo_pp); printf("&foo_pp...%p\n", &foo_pp); printf("*foo_pp...%p\n", *foo_pp); printf("**foo_pp...%d\n", **foo_pp); return 0; }执行
int main() { printf("sizeof(char)...%d\n", sizeof(char)); printf("sizeof(int)...%d\n", sizeof(int)); printf("sizeof(float)...%d\n", sizeof(float)); printf("sizeof(double)...%d\n", sizeof(double)); printf("sizeof(int*)...%d\n", sizeof(int*)); return 0; }
至于在c标准中,没有规定指针类型的大小,详细大小依靠详细的环境。
被误解为函数,可能是大多数情况下。我们都这样使用它:sizeof()。事实上这样用 sizeof 类型,如sizeof int也是能够的。
int main() { int foo; int *int_p = &foo; //在c中以下这句代码会给出警告,但可执行;而在c++中是会直接报错的 double *dou_p = &foo; foo = 5; printf("foo...%d\n", foo); printf("int_p...%p\n", int_p); printf("dou_p...%p\n", dou_p); printf("*int_p...%d\n", *int_p); printf("*int_p...%f\n", *int_p); printf("*dou_p...%d\n", *dou_p); printf("*dou_p...%f\n", *dou_p); return 0; }执行
如4字节的int和相同4字节的float,所分配的空间大小一样,但能够表示的数据范围有非常大差距。详细存储方式,大家可查下。
版权声明:本文博主原创文章,转载,转载请注明出处。
标签:
原文地址:http://www.cnblogs.com/mengfanrong/p/4907541.html