欢迎光临
我们一直在努力

linux基础,c语言进阶,指针基础篇,

指针是C语言中一个非常强大但也相对复杂的概念,理解指针对于掌握C语言至关重要。他的作用非常强大:

1. 指针让C语言程序更加简洁、高效

2. C指针可以直接操作内存

指针基础

基本概念

地址

内存中用来区分不同字节的编号,64位操作系统 8个字节表示地址

指针

指针就是地址,地址就是指针,指针指向某个地址对应的内存空间

指针变量

是一个变量,变量用来存放内存地址,使用变量,便是使用该地址,所以指针变量有时也简称为指针

运算符

&:获得变量在内存中的首地址(取地址符号)

int a = 0;

&a;

表达式的值:变量在内存空间中的首地址

表达式的类型:int *&有类型升级的效果

* :

*p = 100; //100赋值到p指向的空间中

a = *p; //使用p指向空间中的值赋值给a

左值:将右值放入指针指向的空间

右值:取指针指向空间中的值

指针变量的定义:

所有的指针变量在64位操作系统中均为8个字节

数据类型 *变量名;

int *p;

int *p, *q;

char *p;

double *p;

指针变量的初始化:

1. 野指针:

未初始化的指针,指向随机空间。

指向已经被释放空间的指针。

2. 空指针:

NULL,内存中为0值,指向内存地址为0x0空间的指针。

0x0地址空间不能读写,如果读写会产生段错误(操作非法内存空间)。

内存访问两种形式

通过变量名访问(直接访问)

int a;

int b;

a;

b;

通过变量在内存中的地址访问(间接访问)

int a;

int *p = NULL;

p = &a;

*p = 100;

指针的算数运算

+ – ++ —

int *p:偏移量为4字节

double *p:偏移量为8字节

char *p:偏移量为1字节

p++:指针向内存高地址偏移指向数据类型大小个字节空间

p–:指针向内存低地址偏移指向数据类型大小个字节空间

指针作为函数传参

1.传值:

函数体内想使用函数体外部变量值的时候传值

2. 传地址:

函数体内想修改函数体外部变量值的时候传地址

3.数组传参

int a[5] = {1, 2, 3, 4, 5};

int fun(int array[5]);

int fun(int array[], int len);

int fun(int *parray, int len);

指针和数组的关系

数组是用来存放一组数据的

指针是用来操作数据的

指针和一维数组的关系

int a[5] = {1, 2, 3, 4, 5};

int *p = NULL;

p = a;

a == &a[0]

数组下标为n的元素访问:

a[n] == *(a+n) == *(p+n) == p[n]

一维数组的数组名是指向数组第一个元素的指针常量

C语言中[ ]表示让指针加上某个偏移量再取*

p[n] == *(p+n)

指针是C语言的核心特性,它提供了直接操作内存的能力,使得C语言非常灵活和强大,能够实现高效的内存管理和复杂的数据结构。掌握指针需要理解内存地址的概念,熟练运用取地址 & 和解引用 * 操作符,并时刻注意指针的安全使用以避免常见的错误

赞(0)
未经允许不得转载:171主机测评 » linux基础,c语言进阶,指针基础篇,
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址