C语言一级指针与二级指针

指针的概念

指针就是地址, 利用这个地址可以找到指定的数据

指针就是地址, 那么在使用的时候, 常常会简单的说 指针变量为指针

指针变量就是存储地址的变量

int *p1;// 申请了一个变量, 即在内存中开辟了一块内存, 存储数据

// 开辟了 8 个字节, 在 Mac 下 指针都占 8 个字节

使用指针, 实际上应该说成使用指针变量

1> 算术运算

+1 移动几个字节?

看类型: int *,  long *,  char *

2> 获得地址表示的数据

指针里面存储的是地址, 就可以将该地址中的数据取出来

寻址运算符 *&p1  -> p1

3> 修改改地址中的数据

4> 作为函数参数的使用(*****)

如果传递的不是指针变量, 而是普通的变量, 就是值传递: 函数内与函数外是两个不同的变量, 只是存储的数据相同(好比发送文件)

如果传递的是指针变量, 即传递的是地址, 那么就是引用传递: 函数内外可以看成同一个变量(好比发送链接)

由于函数参数使用指针后, 可以实现函数内变量修改后, 影响到函数外的变量. 因此常常将函数参数设置为指针类型的变量

实现利用参数返回多个数据的函数

scanf("%d", &num);

二级指针

二级指针就是指向一级指针的指针(n 级指针就是 指向 n-1 级指针的 指针)

指针的本质就是地址, 那么几级指针也只是一个地址, 唯一不同的就是寻址的结果(*p)

1>在开发中使用 二级指针的地方就是利用函数或方法返回一个 一级指针数据

2> 如果需要用函数参数返回数据, 如果返回的是一般的数据, 传递一级指针

3> 如果返回的是一个一级指针, 那么参数应该是一个二级指针

4> 如果返回的是一个 n 级指针, 那么参数应该是一个 n+1 级指针

下图中*p1指的是num的值,*p2指的是p1内存的地址,**p2也指的是num的值......

时间: 2024-12-25 17:07:29

C语言一级指针与二级指针的相关文章

C语言一级指针、二级指针、数组作为参数传递需要注意的若干问题

在C语言编程时,经常会用到指针或数组作为参数传递,但有时结果却并不是自己想要的.下面总结下指针.数组作为参数传递需要的问题. 一级指针与二级指针的使用范围: 一级指针存放变量的地址,指向的值是变量的内容.如int* p={1,2,3}, p=数组的首地址,*p=数组的第一个值: 二级指针存放一级指针的地址,指向一级指针.如int*p ={1,2,3}, int**pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1. 在作为参数传递时什么时候用一级指针,什么时候用二级

关于一级指针和二级指针的简单见解

一级指针形式如: int *p二级指针形式如: int **p 可能很多初学者会疑惑在函数参数里面到底应该用一级指针还是二级指针. 下面用几个例子说明一下: 第一个是大家都很熟悉的链表 下面是一个链表结构:   typedef struct Node{ int value; struct Node *next;} 对于添加数据到链表尾部这个函数,传入的参数必须是一个二级指针. 在传参的时候发生的赋值动作是: Node *hNode;Node **pNode = &hNode; pNode指向了h

(C++)函数参数传递中的一级指针和二级指针

(C++)函数参数传递中的一级指针和二级指针 主要内容: 1.一级指针和二级指针 2.函数指针传递的例子 3.什么时候需要传递二级指针? 4.二级指针在链表中的使用 1.一级指针和二级指针 一级指针:即我们一般说的指针,就是内存地址: 二级指针:指向指针的指针,就是地址的地址: 如: int a=1; int *p=&a; // p为a变量的地址,通过*p可以得到a的值 int **q=&p; // q为p指针的地址,通过**q可以得到a的值 2.函数指针传递的例子 程序1: 1 2 3

指针数组,数组指针,指针函数,函数指针,二级指针详解

先看个简单的:char *p,这定义了一个指针,指针指向的数据类型是字符型,char  *(p)定义了一个指针P: char *p[4], 为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[]是一个数组,暂时把p[]看成是q,也就是char *(q),定义了一个指针q,只不过q是一个数组罢了,故定义了一个数组,数组里面的数据是char *的,所以数组里面的数据为指针类型.所以char *p[4]是四个指针,这四个指针组成了一个数组,称为指针数组,既有多个指针组成的数组. char(*p

【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. cppIDE 使用mfc和codeblocks中的mingw编译器.执行system命令中的bat批处理脚本. 一级指针 指针,结构体struct,

一级指针以及二级指针

我想不大理解二级指针的根源是我对程序对堆栈的用法还不够深入了解. 采用一级指针最好是方便修改指针对象的值,采用二级指针最好是方便修改指针的值. #include <iostream> #include <stdio.h> using namespace std; class haha { }; void main() { haha *p(new haha); printf("%p\n", p);//一级指针的地址 printf("%p\n",

从一级指针到二级指针

昨天,写了一些关于一级指针的见解,那么这次我们再来看看二级指针的一些用法,也可以说是我自己的一些见解 所谓二级指针其实和一级指针差不多,一级指针是存储0级指针地址的变量,(一定要记住这一点:指针也是变量,编译器会给它分配内存空间,它的内存空间和它指向的内存空间是不同的,它的内存空间里只能存储空间地址:)所以二级指针就是储存一级指针地址的变量,或者说二级指针是指向一级指针空间的变量:还可以说是指向一级指针的指针: 那么下面我们来看代码: void changePointer(char **c) {

一级指针,二级指针,指针数组,数组和指针

指针和数组指针是个用来存放地址的变量:&arr表示整个数组:arr数组名表示首元素的地址:指针解引用即表示指针所指向的内容比如:char ptr="abcdef";ptr; //指针解引用即表示它所指向的内容,即abcdefptr; //ptr里保存的是字符串的地址2.一级指针一级指针就是指指针,里面放的就是元素的地址,我们可以通过访问元素的地址来找到该地址里存放的内容,即元素本身.比如:char str1[ ]={1,2,3,4,5,6,7};3.二级指针二级指针就是指向一级

c语言中如何通过二级指针来操作二维数组

通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅助理解. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h>//输入输出头文件. #include <stdlib.h>//本程序需要用到malloc/free函数,引