指针是C语言最重要的特性之一,

也是最容易被误解的特性之一。


现代计算机把内存分割为字节(Byte),

每个字节都有唯一的地址(Address),

如果内存中有n个字节,可以把地址看做0~n-1的数。

程序中的每个变量都占据字节(至少1字节),把第一个字节的地址称为”变量的地址”,

假设变量int i占有内存2000~2003,则变量i的地址是2000。

指针变量(pointer variable)

口诀:

变量有位置,位置有地址

指针是变量,其值为地址

指针就是地址,指针变量就是存储地址的变量。

C语言要求每个指针变量只能指向一种特定的类型的对象。

int *p;
double *q;
char *r;

指针变量的赋值:

int i=2099;
int* p;
P = &i;
printf("%d", *p);

值和地址

&取地址运算符

*间接寻址运算符

下例中:

i是普通变量,&i是存储变量的地址

p是指针,是地址,*p是指针指向地址的值

#include <stdio.h>
main() {
int i=2099;
printf("变量的值:%d\n", i );
printf("变量的地址:%x\n", &i ); int *p;
p = &i;
printf("指針(值):%d\n", *p );
printf("指針(地址):%x\n", p );
}

NULL指针

在变量声明时,如果没有确切的地址可赋值,为指针变量赋一个NULL值是一个良好的编程习惯。

赋为NULL值的指针称为“空指针”。

#include <stdio.h>
int main(int argc, char *argv[]) {
int *ptr = NULL;
printf("ptr的值是:char=%x, int=%d\n",ptr,ptr); return 0;
}

运行结果:

ptr的值是:char=0, int=0

最新文章

  1. jQuery之常用且重要方法梳理(target,arguments,slice,substring,data,trigger,Attr)-(一)
  2. Webix JavaScript UI 库可以帮你构建跨平台的HTML5 和 CSS3 程序
  3. canvas刮刮乐和画笔
  4. OpenStack 企业私有云的若干需求(3):多租户和租户间隔离(multi-tenancy and isolation)
  5. chrome表单自动填充去掉input黄色背景解决方案
  6. HTML和CSS特殊属性
  7. 如何进行fragment中的来回切换?
  8. 链接一个外部lib库的时候注意事项
  9. Binder机制,从Java到C (4. Parcel)
  10. MAMP 环境下为 php 添加 pcntl 扩展
  11. 无阻赛的脚本(js脚本延迟方法)
  12. 【pyHook】 监测键盘鼠标事件等
  13. Python时间、日期、时间戳之间的转换
  14. GO入门——7. 并发
  15. 嵌入式iframe子页面与父页面js通信方式
  16. 使用spring的特殊bean完成分散配置
  17. OpenCV常用库函数[典]
  18. lecture4特征提取-七月在线-cv
  19. 联想拯救者15-isk安装固态硬盘与系统迁移教程
  20. 「Vue」登陆-路由拦截器

热门文章

  1. JavaScript核心 Dom Bom
  2. 使用Node.js给图片加水印的方法
  3. 关于eslint的使用与配置,以及prettier的使用
  4. soloPi安装使用
  5. uniApp 列表
  6. Blazor 准备好为企业服务了吗?
  7. MVC中Cookie的用法(二)---CookieHelper
  8. 内网渗透 day7-linux信息收集
  9. Git操作:远程仓库(git remote)的添加、管理和删除
  10. JS函数命名规范