C指针——知识点集锦

文章阐述了CPU在访问内存时实际操作的是地址,而非变量或函数的名称。编译和链接过程将名称转换为地址。指针变量存储数据的地址,通过解引用操作获取数据。文中还介绍了数组名作为指针的概念以及指针变量的加减法运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。
  • 变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。
  • 指针变量:如果一个变量存储了一份数据的指针(地址)
  1. int a = 100;
  2. int *p_a = &a;
  • 在定义指针变量 p_a 的同时对它进行初始化,并将变量 a 的地址赋予它,此时 p_a 就指向了 a。值得注意的是,p_a 需要的一个地址,a 前面必须要加取地址符&,否则是不对的。
  • 定义指针变量时必须带*,给指针变量赋值时不能带*
  • 指针变量存储了数据的地址,通过指针变量能够获得该地址上的数据,格式为:*pointer   (解引用)
  • 指针变量的加减法:pa、pb、pc 每次加 1,它们的地址分别增加 4、8、1,正好是 int、double、char 类型的长度;
  • a 的类型为 int,占用 4 个字节,pa 是指向 a 的指针,如图所示:
  •  如果pa++,则:

  • // 数组名可以认为是一个指针,它指向数组的第 0 个元素
    int arr[] = { 99, 15, 100, 888, 252 }; int len = sizeof(arr) / sizeof(int); //求数组长度 int i; for(i=0; i<len; i++){ printf("%d ", *(arr+i) ); //*(arr+i)等价于arr[i] }

    // 我们使用了*(arr+i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值