博客
关于我
C语言指针运算
阅读量:775 次
发布时间:2019-03-24

本文共 1123 字,大约阅读时间需要 3 分钟。

指针基础与操作指南

1. p + 1 的含义

p + 1 的含义并非简单地将一个整数加 1,而是对指针执行操作。这里的 +1 是对指针本身的操作,类似于在内存中移动固定大小的空间。通过不断对指针执行 +1 操作,可以逐个访问数组中的元素。

array 示例

例如,考虑以下代码:

int a[] = {1, 2, 3, 4, 5};int *p = a;
  • p 指向数组 a 的第一个元素。
  • p + 1 式式操作将 p 移动到数组下一个元素的位置。

运行以下程序可以更直观地观察:

#include 
int main() { int a[] = {1, 2, 3, 4, 5}; int *p = a; printf("p = %p\n", p); printf("p+1 = %p\n", p+1); printf("*p = %d\n", *p); // *p 即 a[0] printf("*(p+1) = %d", *(p+1)); // *(p+1) 即 a[1] return 0;}

输出结果如下:

p = 000000000062FE00p+1 = 000000000062FE04*p = 1*(p+1) = 2

指针的其他操作

指针的算术运算

  • p + np -= n 类似于 p += n 的操作,分别用于在内存中向前或向后移动 n 个单位。
  • p++--p 实则是 p = p + 1p = p - 1 的意思。

两指针的比较

int a[] = {1, 2, 3, 4, 5};int *p  = &a[0];int *p1 = &a[4];
  • p 指向 a[0]p1 指向 a[4]
  • p1 - p = 4,这等价于两个指针之间的地址差除以 sizeof(int),即 4 / 4 = 1

指针的大小与限制

1. 指针的大小统一

所有指针的大小相同,因为它们都存储内存地址。但是不同的指针类型之间不能互相赋值,例如 int *p = (char*)0x12345678; 会导致类型错误。

2. 指针的有效使用

指针只能在动态分配的内存区域内使用,避免越界操作,以免导致程序崩溃或者数据丢失。


指针的主要用途

  • 传递大型数据时,尤其是机器型数据,利用指针可以减少内存占用。
  • 传递数组或结构体时,使用指针可以避免分配过多内存。
  • 返回多个返回值时,通过指针数组保存返回数据。
  • 动态分配内存以应对需求变化,比如使用 malloccalloc 函数。

通过对指针的操作,我们能够方便地在内存中定向存取和操作数据,这为程序开发提供了极大的灵活性。

转载地址:http://lkakk.baihongyu.com/

你可能感兴趣的文章
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
MySQL8,体验不一样的安装方式!
查看>>
MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
查看>>
Mysql: 对换(替换)两条记录的同一个字段值
查看>>
mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
查看>>
MYSQL:基础——3N范式的表结构设计
查看>>