三、指针

1.内存地址就是一个编号,这些编号都是连续的,称作地址。编号对应的内存以字节为单位划分。

2.内存地址的大小与数据总线的位数有关

3.内存访问分为:直接访问和间接访问

①直接访问:直接访问内存单元中的内容

示例:

int a = 20 ;

对于直接访问,a代表存放数据的内存单元,通过对a赋值或者取值,实现对内存的访问

②间接访问:通过内存单元编号(地址)以及数据所占字节数访问内存中的数据

间接访问在程序中随处可见,通过指针实现内存的间接访问

4.指针:就是地址。内存地址,我们习惯上把内存地址叫做指针。

5.地址:内存编号。内存地址可以简称为地址。“&”查看一个变量的内存地址。“%p”打印地址

6.关键符号:“&”取地址符

7.指针变量:存储内存地址的变量

8.定义指针变量:需要在前面加*

此时 * 仅仅起到表示作用,告诉编译器 p 一个存放 地址 的变量,p是一个指针变量

示例:

int a = 20;

int *p = &a;//(int *)p = &a;

9.取值符号 *

使用 * 号访问内存编号里面对应的内容

示例:

int a = 5;//定义一个整型

int *p = NULL;//定义一个指针变量,地址为空

p = &a;//获取a的地址

printf(“%d”,*p);//*p获取a中的内容

10.给指针变量赋值,意味着指针的重指向

11.指针的类型:

①因为内存地址只跟操作系统有关,所以指针变量所占的内存大小取决于操作位数(32位系统指针占4个字节,64位系统指针占8个字节)

示例:

int *p = NULL;

double *p1 = NULL;

float *p2 = NULL;

long *p3 = NULL;

char *p4 = NULL;

printf(“%lu\n”,sizeof(p));//8个字节

printf(“%lu\n”,sizeof(p1));//8个字节

printf(“%lu\n”,sizeof(p2));//8个字节

printf(“%lu\n”,sizeof(p3));//8个字节

printf(“%lu\n”,sizeof(p4));//8个字节

因为只要是地址,都是8个字节。地址字节数与数据类型无关,数据类型管控从哪开始取,取多少字节。

②int *p 整型指针 double *p 双精度指针 char *p 字符指针

③不同类型的指针,访问的内存大小不一样

12.内存怎么来的

①手动申请(malloc函数)

②系统分配(定义变量的内存空间都是系统分配的)

13.指针变量加减一个常数,指针本身不移动

14.指针变量自增自减,指针移动,地址发生变化。

15.指针类型一定要和指向内存中的数据类型一致。

16.补码:①符号位不变②其他位取反③最后一位加1

17.数组名是一个符号地址常量,不是变量,所以不能自增、自减

时间: 2024-11-05 16:30:46

三、指针的相关文章

三指针(三指针排序只有三种元素的数组)--12--三指针--颜色分类

颜色分类 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. 注意:不能使用代码库中的排序函数来解决这道题. 示例: 输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2] 题目来源:力扣(LeetCode)题目链接:https://leetcode-cn.com/problems/sort-colors 分析 题目可通过快排.三指针,

[leetcode]75.Sort Color三指针

import java.util.Arrays; /** * Given an array with n objects colored red,white or blue, * sort them so that objects of the same color are adjacent, * with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to repr

C语言回滚(三)-指针

#include <stdio.h>#include <stdlib.h> //& 地址运算符 //* 间接运算符 // *的作用 当*后面跟一个指针名或地址的时候, // *给出储存在被指向地址中的数值int change1(int x, int y);//int change2(int *x, int *y);int change2(int *, int *); //C语言的简洁性允许这样定义 int main(){ int *p; //定义了一个指针 //p是一个指针

(三)指针和数组

在c中指针和数组似乎有着千丝万缕的关系.其实它们不是一回事:指针是指针,数组是数组,两者不相同. 说它们有关系,不过是因为常见这样的代码: int main() { int array[]= {1,2,3,4,5}; int n=sizeof(array)/sizeof(int); int *p=array; int i; for(int i=0; i<n; i++) { printf("p[%d]...%d\n",i,p[i]); printf("*(p+%d)...

75. Sort Colors(荷兰国旗问题 三指针)

Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red, white, and bl

「C语言回顾之旅」第二篇:指针详解进阶

说明: 第一篇回顾了指针的基本概念以及基本使用,因此对指针也有了一个较为清晰的思路,但实际上第一篇关于指针的内容是不太容易忘记的.这是第二篇中的内容是比较容易混淆,但对于指针的进一步学习也是非常重要的. 一.指向函数的指针 1.函数指针 ·函数指针即指向函数的指针,函数指针值为函数的入口地址,通过使用该指针,即可以使用该函数: ·编写一个程序返回两个数的最大值,通过函数指针调用函数: a.main函数代码如下: #include<stdio.h> int max(int *, int *);

C语言指针与数组易混淆知识点(一)

一指针与数组 二指针与函数 三指针数组数组指针指向指针的指针 四程序陷阱 一.指针与数组 指针:指针本身也是一个变量,它的内容是指向的内容的地址.指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据.但是指针所占内存单元的大小(即其内容)是跟操作系统的地址位数有关,比如32位地址的系统,那么指针所占的内存单元就是4个字节,16位就是2个字节,因此,指针的类型只是限定它所指向的变量的类型,其内容所占的单元大小是与操作系统的地址位数相关,与变量类型无关. 在32

浅谈C语言指针

下面就几种情况讨论指针. 一.指针和变量 变量是存储空间的别名,访问形式是直接访问. 指针访问内存地址是间接访问. 使用指针访问内存的场合:1.局部变量,参数传递    2.动态分配内存 指针本身也是一个变量,用来保存内存地址的变量,也有存储空间.使用他来访问存储空间,会浪费存储空间,并是访问速度变慢. 二.指针和数组 使用指针打印数组元素值demo如下 #include<stdio.h> int main () { int array[10]={1,2,3,4,5}; int *parray

指针练习

PTA 实验作业 题目1 :6-5 利用指针找最大值 本题题目及裁判测试程序样例 本题要求实现一个简单函数,找出两个数中的最大值. 1. 本题PTA提交列表 2. 本题设计思路 这道函数题要求我们用指针的方式来找出两个数中的最大值. 其中px和py是题目中定义的用户传入的两个整数的指针.也就是我们要比较的两个数. 函数findmax应找出两个指针所指向的整数中的最大值,存放在pmax指向的位置. 首先当在子函数传入两个数之后,先判断两个指针所指向的数值之差. 如果*px>*py 则令* pmax

LeetCode:最接近的三数之和【16】

LeetCode:最接近的三数之和[16] 题目描述 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. 例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). 题目分析 这道题就是三数之和问题的一种变形. 三数之和问题的求解策略是将三指针变为双指针问题