首页 > 其他分享 >16、指针

16、指针

时间:2024-12-02 22:30:07浏览次数:13  
标签:指向 16 int char 地址 空间 指针

指针是C语言编程灵魂,但是也不要神话它,掌握住指针的实质很重要。

1、指针地址空间

        指针:指针变量  用来存储内存地址编号。

        地址:内存会按照字节进行编号,一个字节就有一个编号。

                  一般地址表示用十六进制   ,查看地址用%p

        空间:指针本身的空间  和  指针指向的空间        

int a;						
int * p;
p = &a; 

指针指向谁就保存谁的地址,保存谁的地址就指向谁。

2、指针定义

        指针是变量,也要遵循先定义在使用的原则,定义和变量的定义类似。        

        格式:

                指向对象的数据类型 * 指针名;

                指针对象的数据类型:学过的数据类型都可以,具体看需求

                *:代表指针的标记

                指针名: 自定义   p q t  k  head tail h

        例子:

                定义一个指针指向int型的变量:  int * p;

                定义一个指针指向char型空间:   char * q;

                定以一个指针指向 int [3]的空间:int (*q)[3];

3、指针赋值

        指针使用前必须有明确的指向,也就是要有合法的地址值。

        什么类型的指针存储什么类型的地址,但是对于指针变量来说存储的是地址值即可,因此也可以将地址强转赋值给不同类型的指针。        

// 先通过变量的形式拿到地址编号
int a = 10;  // &a	
int b = 20;  // &b	
	
// 让指针指向空间a
p = &a;    // *p就是a	
*p = 15;   // a == 15

p = &b;   // *p就是b,  对p赋值就改变了p的指向
*p = 35;   // b = 35;

char * q = (char *)&a;
// *q就是a的第一个字节的空间

4、指针操作指向的空间

        表示:*指针名

        后续操作需要看 类型决定后续操作。

        int * p = 地址;   *p是int型按int型操作

        char *p = 地址;  *p是char型按char型操作

        struct book* 盘= 地址,*p是struct book 结构体类型,按结构体操作

5、指针本身空间

        表示:指针名

        操作的时候可能会改变指针的指向

        指针本身空间大小和系统有关,32位--4个字节 , 64位 -- 8个字节

        指针变量空间只存地址编号,能够存储地址编号即可,与指向对象类型无关。

6、指针偏移        

        前提:指针有明确的指向,

        指针偏移和指针指向对象类型有关,以它为单位进行偏移。

        指针指向对象类型 从 指针的定义 上看。        

char ch = 'a';
int b = 30;		
double d;		

char *p = &ch;		
int *q = &b;		
double *t = &d;
		
printf("%p %p %p\n",p,q,t);
printf("%p %p %p\n",p+1,q+1,t+1);

         指针偏移偏移一般用于连续的空间 --- 数组、动态内存申请

int arr[] = {5,29,30,57,8,49,20};			
int *p = arr;    // 等价于  p = &a[0]

printf("%d",*(p+0));   // arr[0]   在这里*解地址的意思
printf("%d",*(p+1));   // arr[0]   在这里*解地址的意思

标签:指向,16,int,char,地址,空间,指针
From: https://blog.csdn.net/amyliyanice/article/details/144199656

相关文章

  • leetcode 1652. 拆炸弹 未解决
    1652.拆炸弹原本是简单题,但是k<0的情况由于选用的方法不好,浪费太多时间了。代码也有很多冗余classSolution{public:vector<int>decrypt(vector<int>&code,intk){intsize=code.size();vector<int>res(size,0);if(k==0)ret......
  • 对指针的理解(一)
    sizeof一个运算符,会给出某个类型或变量在内存中所占据的字节数sizeof(int) 代表int在内存中占据了几个字节sizeof(i)变量i在内存中占据了几个字节例子inta=1;printf("%d",sizeof(int));printf("%d",sizeof(a));printf("%d",sizeof(double));输出448说明整形in......
  • 实验五 C语言指针应用编程
    实验五C语言指针应用编程实验任务1——数组求最大最小值#include<stdio.h>#defineN5voidinput(intx[],intn);voidoutput(intx[],intn);voidfind_min_max(intx[],intn,int*pmin,int*pmax);intmain(){ inta[N]; intmin,max; printf("录入%d个数......
  • H5-16 CSS 的引入方式
    1、内联样式(行内样式)要使用内联样式,你需要在相关的标签内使用样式(style)属性。Style属性可以包含任何CSS属性温馨提示:缺乏整体性和规划性,不利于维护,维护成本高<pstyle="color:red;font-size:30px;">内联样式</p>2、内联样式温馨提示:单个页面内的CSS代码......
  • 力扣15题——蓝桥杯每日一练(双指针+排序)
    #题目给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返回所有和为0且不重复的三元组。注意:答案中不可以包含重复的三元组。#思路通过排序+双指针完成解题#......
  • 实验5 C语言指针应用编程
    一,实验目的1,深度理解使用指针变量间接访问数据,代码2,会使用指针变量间接访问一维数组元素,二维数组元素3,会使用指针变量处理字符串4,会使用指针变量作为函数参数(形参,实参)和返回值5,能灵活应用数组,指针,函数,编程解决实际问题二,实验准备使用指针间接访问数组(一维,两维)指针作为函数......
  • 永嘉VINKA-LED显示驱动数显驱动芯片VK1640 SOP28适用于血氧仪,温控仪LED驱动
    产品品牌:永嘉微电/VINKA产品型号:VK1640封装形式:SOP28概述VK1640是一种数码管或点阵LED驱动控制专用芯片,内部集成有数据锁存器、LED驱动等电路。SEG脚接LED阳极,GRID脚接LED阴极,可支持8SEGx16GRID的点阵LED显示。适用于小型LED显示屏驱动。采用SOP28的封装形式。LJQ3501特......
  • Qt/C++实现帧同步播放器/硬解码GPU绘制/超低资源占用/支持8K16K/支持win/linux/mac/嵌
    一、前言首先泼一盆冷水,在不同的电脑上实现完完全全的帧同步理论上是不可能的,市面上所有号称帧同步的播放器,同一台电脑不同拼接视频可以通过合并成一张图片来绘制实现完完全全的帧同步,不同电脑,受限于网络的延迟,命令交互的时间占用,不同硬件之间的主频偏差等,肯定会有些许的误差,只要......
  • 如何运用Java爬虫获得1688商品详情数据
    在电商领域,获取商品数据是进行市场分析和竞争情报收集的重要步骤。1688作为中国领先的B2B电商平台,其商品数据对于商家来说具有极高的价值。本文将详细介绍如何使用Java编写爬虫程序,以合法合规的方式获取1688平台的商品信息,并提供详细的代码示例。1.环境准备在开始编写爬虫......
  • SSM宠物领养网站-毕业设计源码11606
    摘 要随着社会的发展和人们生活水平的提高,宠物已经成为许多家庭的重要成员。随之而来的是对于便捷、高效的宠物领养服务的需求,国内外对于宠物领养网站的需求呈现上升趋势。随着社交媒体的普及和线上服务的发展,人们越来越倾向于在线上寻找心仪的宠物和了解领养流程。同时,政......