指针在本质上也是一个变量;
指针需要占用一定的内存空间;
指针用于保存内存地址的值;
不同类型的指针占用的内存空间大小相同,可以通过以下例子看出:
- #include <stdio.h>
- int main()
- {
- int i;
- int* pI;
- char* pC;
- float* pF;
-
- pI = &i;
-
- printf("%d, %d, %0X\n", sizeof(int*), sizeof(pI), &pI);
- printf("%d, %d, %0X\n", sizeof(char*), sizeof(pC), &pC);
- printf("%d, %d, %0X\n", sizeof(float*), sizeof(pF), &pF);
-
- return 0;
- }
程序运行结果如下:
- lihacker@lihacker-laptop:/mnt/share/c$ ./a.out
- 4, 4 BF89351C
- 4, 4 BF893518
- 4, 4 BF893514
常量指针与变量指针
- const int* p; //p可变,p指向的内容不可变
- int const* p; //p可变,p指向的内容不可变
- int* const p; //p不可变,p指向的内容可变
- const int* const p;//p和p指向的内容都不可变
口诀:左数右指
当const出现在*号左边时指针指向的数据为常量;
当const出现在*后右边时指针本身为常量
- #include <stdio.h>
- int main()
- {
- int i = 0;
- const int* p = NULL;
- p = &i;
-
- *p = 10;
-
- return 0;
- }
编译时会报错:
- lihacker@lihacker-laptop:/mnt/share/c$ gcc test1.c
- test1.c: In function ‘main’:
- test1.c:10: error: assignment of read-only location ‘*p’
此时说明第10行语句:*p = 10 出错。
阅读(1746) | 评论(0) | 转发(3) |