最新总结C语言中关于指针等相关理解和使用事宜

1. 指针的含义及基本用法

在C语言中,指针是一个非常重要的概念,它是一个值为内存地址的变量。在一些情况下,直接操作变量并不能完成我们的需求,需要使用指针来操作内存。

1.1 指针变量的声明

指针变量的声明与其他类型的变量有所不同,需要在变量名前加上*符号:

int* p; //声明一个指向int类型的指针变量p

这里的*不是指针运算符,只是用来修饰变量的类型。也可以同时声明多个指针变量:

int *p, *q; //声明两个指向int类型的指针变量p和q

1.2 指针变量的赋值

指针变量需要指向一个有效的内存地址才能使用,常用的赋值方式有以下几种:

1. 直接赋值:

int a = 100;

int* p = &a; //将指针变量p指向a的内存地址

2. 通过其他指针变量赋值:

int a = 100;

int* p = &a; //将指针变量p指向a的内存地址

int* q = p; //将指针变量q指向p指向的内存地址,也就是a的内存地址

3. 运算符&取地址:

int a = 100;

int* p = &a; //将指针变量p指向a的内存地址

1.3 通过指针访问内存

指针变量指向的是一个内存地址,通过指针访问内存的方式有以下几种:

1. 解引用运算符*:

int a = 100;

int* p = &a; //将指针变量p指向a的内存地址

*p = 200; //将a的值修改为200

2. 数组名作为指针使用:

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

int* p = a; //将指针变量p指向数组a的首地址,即a[0]的地址

*p = 10; //将a[0]的值修改为10

p++; //将指针变量p指向数组a的下一个元素,即a[1]的地址

2. 指针和函数

指针和函数结合使用,可以完成一些高级的功能。

2.1 函数指针

函数指针指向的是函数的入口地址,可以通过它来调用函数。

函数指针的声明和使用如下所示:

int add(int a, int b) {

return a + b;

}

int (*p)(int, int); //声明一个指向add函数的指针变量p

p = &add; //将指针变量p指向add函数的入口地址

int c = (*p)(1, 2); //通过指针变量p调用add函数,计算1+2的结果,并将结果赋值给变量c

2.2 指向指针的指针

指向指针的指针可以用来传递指针变量的地址,以便在函数中修改指针的指向。

指向指针的指针的声明和使用如下所示:

void swap(int** p, int** q) {

int* tmp = *p;

*p = *q;

*q = tmp;

}

int a = 1, b = 2;

int* p = &a, *q = &b;

swap(&p, &q); //将变量p和q指向的内存地址交换

3. 指针和字符数组

C语言中,字符串实际上是一个字符数组(字符串常量除外),可以用指针来访问字符串。

3.1 字符串指针

字符串指针指向的是字符串的首地址,也就是字符数组的第一个元素的地址。

字符串指针的声明和使用如下所示:

char* str = "Hello, world!";

for (int i = 0; i < strlen(str); i++) {

printf("%c ", *(str + i)); //依次输出字符串中的每个字符

}

3.2 字符数组的指针

字符数组的指针指向的是整个字符数组。

字符数组的指针的声明和使用如下所示:

char str[20] = "Hello, world!";

char* p = str; //将指针变量p指向字符数组str的首地址

for (int i = 0; i < strlen(str); i++) {

printf("%c ", *(p + i)); //依次输出字符串中的每个字符

}

4. 指针和结构体

结构体是用来存储一组相关数据的数据类型,可以使用指针来访问结构体的成员。

4.1 结构体指针

结构体指针指向结构体的首地址。

结构体指针的声明和使用如下所示:

struct Student {

char name[20];

int age;

};

struct Student stu = {"Tom", 18};

struct Student* p = &stu;

printf("%s %d", (*p).name, (*p).age); //使用指向结构体的指针来访问结构体成员

上述代码中,指针变量p指向结构体变量stu的首地址,通过*p来获取结构体的值后再用.来访问结构体的成员。

4.2 结构体成员指针

结构体成员指针指向结构体成员的地址。

结构体成员指针的声明和使用如下所示:

struct Student {

char name[20];

int age;

};

struct Student stu = {"Tom", 18};

int* p = &stu.age; //将指针变量p指向结构体变量stu的age成员的地址

*p = 20; //修改结构体变量stu的age成员的值为20

总结

本文主要详细介绍了指针在C语言中的含义、基本用法,以及指针和函数、字符数组、结构体的组合使用。指针是C语言中非常重要的概念,掌握指针的使用能够帮助我们更加高效地操作内存,完成我们的需求。

后端开发标签