网站首页 > 技术文章 正文
1 指针概念
- 指针:地址的变量化形式,其存储的是内存中某个存储单元的地址。它是地址的数值表示。
- 指针变量:一种特殊的变量,它专门用于存放变量的地址(即指针)。
注意,指针和指针变量的区别:
- 指针本身是一个地址,这个地址指向内存中的一个存储单元。它只是一个内存地址的抽象表示,没有存储空间来存储值,只是指向一个存储位置。
- 指针变量则是一个变量,用于存储指针的值,即内存地址。指针变量有具体的存储空间,可以存储一个地址值。在程序中,可以通过操作指针变量来间接地访问和操作它所指向的内存地址中的数据。
2 指针变量的定义
语法格式:
类型 变量;
类型 * 指针变量 = &变量;
其中,
- & 叫取地址,返回操作数的内存地
- *叫解引用,指操作指针所指向的变量的值
- 在定义变量时,* 号表示所声明的变量为指针类型。指针变量要保存某个变量的地址,指针变量的类型比这个变量的类型多一个*
- 在指针使用时,* 号表示操作指针所指向的内存空间
注意,
- 指针也是一种数据类型,指针变量也是一种变量
- 指针变量指向谁,就把谁的地址赋值给指针变量
代码示例:
#include <stdio.h>
int main()
{
// 定义一个int类型的变量,同时赋值为10
int a = 10;
// 打印变量的地址
printf("&a = %p\n", &a);
// 定义一个指针变量,int *保存int的地址
// int *代表是一种数据类型,int *指针类型,p才是变量名
int* p;
// 指针指向谁,就把谁的地址赋值给这个指针变量
p = &a;
// 打印p, *p, p指向了a的地址,*p就是a的值
printf("p = %p, *p = %d\n", p, *p);
return 0;
}
关于指针大小,可以通过,sizeof运算符获取,例如,
#include <stdio.h>
int main(int argc, char *argv[])
{
char *p1;
short int *p2;
int *p3;
long int *p4;
float *p5;
double *p6;
printf("%d\n",sizeof(p1));
printf("%d\n",sizeof(p2));
printf("%d\n",sizeof(p3));
printf("%d\n",sizeof(p4));
printf("%d\n",sizeof(p5));
printf("%d\n",sizeof(p6));
return 0;
}
注意,
- 在 32 位系统下,所有类型的指针都是 4 个字节。
- 在 64 位系统下,所有类型的指针都是 8个字节。
3 指针分类
按照其指向的数据类型分类,指针分类包括:
- 字符指针,例如
// 定义了一个字符指针变量,只能存放字符型数据的地址编号
char ch;
char *p = &ch;
- 短整型指针,例如
// 定义了一个短整型指针变量,只能存放短整型数据的地址编号
short num;
short *p = #
- 整型指针,例如
// 定义了一个整型指针变量,只能存放整型数据的地址编号
int num;
int *p = #
- 长整型指针,例如
// 定义了一个长整型指针变量,只能存放长整型数据的地址编号
long num;
long *p = #
- 单精度浮点型指针,例如
// 定义了一个单精度浮点型指针变量,只能存放单精度浮点型数据的地址编号
float num;
float *p = #
- 双精度浮点型指针,例如
// 定义了一个双精度浮点型指针变量,只能存放双精度浮点型数据的地址编号
double num;
double *p = #
- 函数指针,例如
int add(int a, int b)
{
return a + b;
}
int (*func_ptr)(int, int);
- 结构体指针,例如
// 定义结构体类型
struct Student
{
char name[50];
int age;
float score;
};
// 定义结构体指针
struct Student *ptr;
- 指针的指针,例如
// 定义一个整型指针
int *ptr;
// 定义一个指向整型指针的指针(二级指针)
int **pptr;
- 数组指针,例如
// 指向包含5个整数的数组的指针
int (*int_array_ptr)[5];
// 指向任意长度双精度浮点数组的指针
double (*double_array_ptr)[];
// 指向包含10个字符的数组的指针
char (*char_array_ptr)[10];
- 通用指针,是一种特殊的指针类型,用void*来修饰。它可以指向任何类型的数据,包括结构体、数组、函数等,因此也被称为无类型指针。
4 指针和变量的关系
- 指针可以存放变量的地址编号
- 通过指针变量间接修改变量的值
#include <stdio.h>
int main()
{
// 定义一个int类型变量num1,同时赋值为0
int num1 = 0;
// 定义int *指针变量,同时赋值a的地址
int *p = &num1;
// 通过指针间接修改a的值
*p = 123;
printf("num1 = %d\n", num1);
// 定义一个int类型变量b,同时赋值为5
int num2 = 5;
// p 保存 num2的地2
p = &num2;
// 通过指针间接修改b的值
*p = 20;
printf("num2 = %d\n", num2);
return 0;
}
---E N D---
喜欢的记得关注哦!
您的支持是我们前进的动力!
- 上一篇: python的循环语句
- 下一篇: ABB机器人NUM型数据的创建与解析
猜你喜欢
- 2024-12-31 发那科机器人2DV码垛功能
- 2024-12-31 如何使用python进行正确的四舍五入?这个坑有点大
- 2024-12-31 有没有通俗易懂的动态代理示例可供参考学习?
- 2024-12-31 运算符,i.MXRT,管理工具,嵌入式,XECC技术文章分享
- 2024-12-31 第十九天:EXCEL万能字符串转换函数TEXT那些普拉斯的神操作
- 2024-12-31 自动控制原理-滞后校正设计方法以及编程实现
- 2024-12-31 C语言 | 由小到大输出两个数
- 2024-12-31 C++笔记:函数
- 2024-12-31 十万个怎么办-不清楚机器人TEST指令怎么办?
- 2024-12-31 一个 print 函数,挺会玩啊?
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)