C语言指针引用取值

Python016

C语言指针引用取值,第1张

指针是一个存储计算机内存地址变量。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如int、long和double。指针也可以是void类型、NULL指针和未初始化指针。

根据出现的位置不同,操作符  *  既可以用来声明一个指针变量,也可以用作指针的取值。当用在声明一个变量时,*表示这里声明了一个指针。其它情况用到*表示指针的取值。

&是地址操作符,用来引用一个内存地址。通过在变量名字前使用&操作符,我们可以得到该变量的内存地址。

// 声明一个int指针

int*ptr

// 声明一个int值

int  val = 1

// 为指针分配一个int值的引用

ptr = &val

// 对指针进行取值,打印存储在指针地址中的内容

int deref = *ptr

printf("%d\n", deref)

第2行,我们通过*操作符声明了一个int指针。接着我们声明了一个int变量并赋值为1。然后我们用int变量的地址初始化我们的int指针。接下来对int指针取值,用变量的内存地址初始化int指针。最终,我们打印输出变量值,内容为1。

第6行的&val是一个引用。在val变量声明并初始化内存之后,通过在变量名之前使用地址操作符&我们可以直接引用变量的内存地址。

第8行,我们再一次使用*操作符来对该指针取值,可直接获得指针指向的内存地址中的数据。由于指针声明的类型是int,所以取到的值是指针指向的内存地址存储的int值。

说穿了,指针就是地址吧,这里可以把指针、引用和值的关系类比为信封、邮箱地址和房子。一个指针就好像是一个信封,我们可以在上面填写邮寄地址。一个引用(地址)就像是一个邮件地址,它是实际的地址。取值就像是地址对应的房子。我们可以把信封上的地址擦掉,写上另外一个我们想要的地址,但这个行为对房子没有任何影响。

代码如下:

#include <stdio.h>

#include <string.h>

int main()

{

char *text = "ad bc ef content a string test test test"

char *s = "content"

char *p

// 使用 strstr 函数查找字符串 content 的位置

p = strstr(text, s)

if (p != NULL) {

// 跳过 content 使 p 指向 content 后面的内容。

p += strlen(s)

// 如果需要跳过 content 后面的那个空格 p 再加1

p++

printf("%s\n", p)

}

return 0

}

运行结果: