w88体育_w88优德手机版|优德88

贾征宇,Linux C - C根底篇七(初识指针)-w88体育

admin4周前186浏览量

概念

在C语言中,一切的变量都是存放在内存中,内存能够理解为一组有序字节组成的数组,每个字节都有仅有的地址。CPU经过内存寻址对存储在内存中的数据目标的地址进行定位,数据目标是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针就是保存这个地址的变量。也就是说:指针其实是保存另一个变量的地址,咱们能够经过这个地址然后间接地操作这个变量。每个指针都有一个对应的数据类型,不同指针之间的差异不在指针自身,而在于指针所指的变量的类型上。

指针的界说

咱们经过在标识符前加一个操作符 * 来界说指针变量。如下,界说一个指向int类型的指针ip,ip没有指向任何实践的目标。

int *ip;

界说一个指针变量ip1,ip1被初始化为val的地址,通常在变量名前加上&标明取变量的地址。

int val = 100;

int *ip1 = &val;

ip和ip1都指向val,持有相同的地址值。

ip = ip1;

指针不能指向非地址值,例如下面的赋值是过错的:

ip1 = val;

指针不能被初始化或赋值为其他类型目标的地址值,例如下面的指针赋值都是过错的:

double dval;

ip = &dval;

通常在指针的前面加上一个*代表取出指针指向地址里边的值:

val = *p1;

C供给了一种特别的指针类型,空(void*)类型指针,它能够被任何数据指针类型的地址值赋值。void*标明相关的值是个地址,但该地址的目标类型不知道,咱们不能够操作空类型指针所指向的目标,只能传送该地址值。

void * vp;

vp = ip;

vp = &dval;

指针的运算

c语言中,能够对指针变量p进行p++、p--、p + i等运算,运算所得成果相同是一个指针,只不过指针所指向的内存地址比较于p所指的内存地址行进或许后退了i个操作数。用一张图来阐明一下整型指针的操作:

p是一个 int 类型的指针,指向内存地址 0x0000001C 处,则p++将指向与p相邻的下一个内存地址,因为 int 型数据占 4 个字节,因而 p++ 所指的内存地址为0x0000001C+4即0x00000020,其他顺次类推。不过要注意的是,这种运算仅仅改变了它所指向的地址。

数组与指针

在C语言中,指针与数组之间的联系十分严密,许多能够用数组完结的作业相同能够运用指针来完结。

先声明一个数组:

int ia[10];

其间ia既标明数组的数组名,也代表着数组的首地址,还代表数组首元素的地址,一同咱们能够用ia + i来代表数组中第i个元素的地址。那么用指针怎么标明呢?

int *ip;

ip = ia;

声明一个指向int型的指针ip,上面说了ia是个整型数组的地址,所以能够直接赋值给ip,这时ip也指向ia这个数组的首地址。ia[i] 就等效于 *(ia+i) 等效于 *(ip+i) 等效于 ip[i] 。一同咱们能够用&ia[i] - &ia[j] 标明第i个元素和第j个元素这两个地址之间相隔数据元素的个数。

以上是老韩关于Linux c根底指针的总结欢迎一同评论,如有缺乏欢迎点拨;对Linux c或许Linux驱动感兴趣的朋友能够保藏重视,我会继续更新的,谢谢支撑!