指针的总结一(指针的定义)

指针的实质就是地址,指针的变量就是用来存放地址的变量;指针有一级指针和二级指针之分。

一.一级指针的介绍

1.  指针变量的定义格式如下:

数据类型 *指针变量名

int   *p; (p为指针变量名,类型为int)

char  *ch; (ch为指针变量名,类型为char)

……

需要知道的是,指针变量只能用来存放地址;

* 表示这个变量是一个指针变量;

* 指针变量名,表示获取这指针变量指向的内存空间的内容;

int 表示这个指针变量只能存放int类型的变量的地址;    指针变量也有全局变量和局部的变量。

2.  指针变量的初始化和引用

指针变量的初始化可以分为4种,以下为指针变量的初始化和引用。

1)定义的同时并进行初始化

int *p=&a; (int 类型,指针名为p—p表示的是地址,把a的地址赋值给p);

 

可看出a的地址和p的值是一样的,说明把a的地址给了p这个指针变量.因为p是指针变量,也就是变量,既然是变量就可以重新赋值。即

其实质是,p指针的指向已经发生改变。

2)先定义指针变量,然后再初始化

int *p1;

*p1=&b;(b之前已定义过);

3)可以用一个已经存在的指针变量来初始化

4)给指针变量赋值为NULL;

其中,int *p5=NULL 表示指针变量 p5指向内存中地址为0的地方。

从上可以,* 使用的场合有两个:第一个是,用在定义变量的时候,表示定义的是一个指针变量;第二个是, *指针变量名,表示获取指针变量指向的内存空间的内容。

总结一下一级指针的知识:

int num=10;

int *p=num;

(p为指针变量,p的地址为&p,p的值为num的地址即&num)

二. 二级指针的介绍

以上介绍的是一级指针,接下来介绍的是二级指针的定义和使用。何为二级指针?二级指针就是用来存放指针变量的地址!

一级指针的定义:

数据类型 *指针变量名

int   *p; (p为指针变量名,类型为int)

char  *ch; (ch为指针变量名,类型为char)

二级指针的定义:

数据类型 **指针变量名

int   **p; (p为二级指针变量名,类型为int)

另外,如果printf(“p1=%p\n”,p1)表示取p1得地址!

而且,二级指针只能存放一级指针变量的地址;如果直接把二级指针直接指向常量的地址是不可以的!如下:

从上图表明上面的那种定义是错误的,要注意不能犯!

当然还有三级指针,三级指针就是存放二级指针变量的地址!  int  ***p3=&p2;

时间: 2024-11-06 09:58:09

指针的总结一(指针的定义)的相关文章

给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点

#include <iostream> #include <string.h> #include <stdlib.h> #include <stack> using namespace std; struct Node { int data; struct Node* next; }; struct Node* create_list(int len) { if (len <= 0) return NULL; struct Node* head; st

指针知识梳理1-变量基本定义及使用

一.指针变量.地址.数据.内存关系 在学习指针之前,我们先统一几个概念. (1)在计算机中本质 用 内存 来存储 数据 ,在我们写代码的时候,用变量来存储数据 . (2)变量是在编程语言中的概念,方便我们编程,当编译运行起来以后,就只有内存了和数据了. 比如 当 我们写代码 int a; int b; a = 1; b = a; 第1行第2行,语法层面是 定义两个变量,计算机层面是在内存中申请 2个4字节内存,a地址 0x10,b地址  0x0c 第3行,语法层面是 给变量a赋值1,计算机层面是

c指针 --笔记2返回指针值的函数

返回指针值的函数 一般带回指针值的函数,定义形式为: int *a (int x, int y); 看这个经典案例: #include <stdio.h> int main(int argc, char const *argv[]) { double score[][4] = {{60.0, 70.0, 80.5, 20.1}, {60.0, 70.0, 80.5, 21.1}, {60.0, 70.0, 80.5, 22.1}}; double *search(double(*pointer

【转】 指针函数与函数指针的区别

一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量. 表示: float *fun();

指针数组和数组指针

指针数组:首先它是一个数组,数组的元素都是指针.它是“储存指针的数组”的简称.int *p1[10];数组指针:首先它是一个指针,它指向一个数组.它是“指向数组的指针”的简称.   int (*p2)[10]; 这里需要明白一个符号之间的优先级问题,关键在于p1.p2先和谁结合.“[]”的优先级比“*”要高.p1 先与“[]”结合,构成一个数组的定义,数组名为 p1,int *修饰的是数组的内容,即数组的每个元素.那现在我们清楚,这是一个数组,其包含 10 个指向 int 类型数据的指针,即指针

再谈指针数组与数组指针

经常遇到这两个概念,很容易混淆,这里细细总结一下. 指针数组:是一个数组,数组的元素是指针.数组占多少个字节由数组本身决定. 数组指针:是一个指针,它指向一个数组.在32位系统下永远是占4 个字节. 举例说明: 1)int *p1[n]; 2)int (*p2)[n]; 1)"[]"的优先级比"*"要高.p1 先与"[]"结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,即数组的每个元素.即p1是指针数组,其包含n个指向int

深入理解C指针之一:初识指针

简单来说,指针包含的就是内存地址.理解指针关键在于理解C的内存管理模式.C里面有三种内存: ①.静态全局内存(生命周期从程序开始到程序结束,全局变量作用域是全局,静态变量作用域在定义它们的函数内部): ②.自动内存(在函数内部声明的变量,在函数被调用时创建,作用域和生命周期都在函数内部): ③.动态内存(内存分配在堆上,根据需要释放,通过指针引用,作用域局限于引用的指针): 下面先来生命一个指针并打印其地址和值,这里p%指的是以十六进制的形式返回数据: #include <stdio.h> m

指针知识梳理7- 函数指针

一.函数的地址 前面讲 程序运行起来以后,在内存中有代码区,程序运行每一条指令,是从内存中读出来这条指令,然后再运行. 所谓函数的地址是指函数的入口地址,这个函数的从这个地址開始进入运行,也就是从这个地址处取指令运行. 那么在代码层面,函数的地址用 函数指针变量 来存储. 二.基本使用 1.函数指针定义 函数指针的定义,在语法看起来略微有点怪,仅仅须要记住形式 返回值 (*指针变量名)(形參类型): 比方,下面4个函数 void func1(void) { } int func2(void) {

1、打印二进制机器码,程序内存分析,大端序小端序,指针数组,数组指针,数组的三种访问方式,typedef,#if-0-#endif,求数组大小,括号表达式

 1.打印二进制机器码(分别表示32位的和64位的) #include <stdio.h> /*按照8位的长度打印一个数值*/ void dis8bit(char val) { int bit = 8; while(bit--) { if(1<<bit&val){ printf("1"); } else { printf("0"); } if(!(bit%4)) printf(" "); } putchar(1

指针数组和数组指针的区别

数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的长度. 如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组. p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++;       //该语句执行过后,也就是p=p+