C语言-详细介绍-*符号

*符号在 C 语言中是一个非常强大且多功能的符号,它涵盖了从基本的乘法运算到复杂的指针操作、函数调用和内存管理等方面。下面总结了*符号的功能和使用场景。

目录

一、乘法运算符:

二、指针声明符:

三、解引用运算符:

四、函数参数中的指针和解引用:

[五、动态内存分配和 *:](#五、动态内存分配和 *:)

[六、指针算术和 *:](#六、指针算术和 *:)

[七、指针数组和 *:](#七、指针数组和 *:)

[八、函数指针和 *:](#八、函数指针和 *:)


一、乘法运算符

  • 最基本的功能是作为乘法运算符,用于计算两个操作数的乘积。

二、指针声明符

  • * 出现在变量声明中,它表示该变量是一个指针,用于存储地址。
cpp 复制代码
int* ptr;  // 声明一个指向整数的指针
char* str; // 声明一个指向字符的指针
  • 对于更复杂的指针类型,例如二级指针:
cpp 复制代码
int** ptr2;  // 声明一个指向整数指针的指针
  • 这里 ptr2 可以存储一个 int* 类型指针的地址。

三、解引用运算符

  • * 用于指针变量时,它是解引用运算符,允许访问或修改指针所指向的内存位置存储的值。
  • 解引用操作的本质是根据指针存储的地址找到相应的内存位置,并对该位置的数据进行操作。
  • 注意,使用解引用操作符时,必须确保指针已正确初始化,否则可能导致未定义行为(如访问非法地址)。
cpp 复制代码
int num = 10;
int* ptr = #  // ptr 存储 num 的地址
*ptr = 20;      // 通过解引用修改 num 的值,现在 num 的值为 20

四、函数参数中的指针和解引用

  • 在函数参数中使用指针,可以实现按引用传递,允许函数修改传递的参数。
cpp 复制代码
void modify(int* ptr) {
    *ptr = 100;  // 修改 ptr 所指向的变量的值
}

int main() {
    int value = 50;
    modify(&value);  // 传递 value 的地址
    // 现在 value 的值为 100
    return 0;
}
  • 对于数组作为参数,实际上传递的是数组首元素的指针,因此可以在函数内使用 * 进行操作。
cpp 复制代码
void printArray(int* arr, int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", *(arr + i));  // 等价于 arr[i]
    }
}

int main() {
    int array[] = {1, 2, 3, 4, 5};
    printArray(array, 5);
    return 0;
}

五、动态内存分配和 *

  • 在使用 malloccallocrealloc 等函数进行动态内存分配时,返回的是一个指针,通常需要使用 * 来存储和操作分配的内存。
cpp 复制代码
int* dynamicArray = (int*)malloc(sizeof(int) * 5);  // 分配可以存储 5 个整数的内存空间
for (int i = 0; i < 5; i++) {
    *(dynamicArray + i) = i + 1;  // 对分配的内存进行赋值,等价于 dynamicArray[i] = i + 1;
}
free(dynamicArray);  // 释放分配的内存

六、指针算术和 *

  • 可以使用 * 与指针算术结合,实现对数组和其他数据结构的操作。
cpp 复制代码
int array[] = {1, 2, 3, 4, 5};
int* ptr = array;  // 指向数组的第一个元素
for (int i = 0; i < 5; i++) {
    printf("%d ", *(ptr + i));  // 打印数组元素,等价于 ptr[i]
}

七、指针数组和 *

  • 对于指针数组,* 可以用来访问数组元素所指向的数据。
cpp 复制代码
char* strings[] = {"Hello", "World"};
printf("%s\n", *strings);  // 打印 "Hello"
printf("%s\n", *(strings + 1));  // 打印 "World"

八、函数指针和 *

  • 可以使用 * 声明和使用函数指针。
cpp 复制代码
int add(int a, int b) {
    return a + b;
}

int main() {
    int (*funcPtr)(int, int);  // 声明一个函数指针
    funcPtr = add;  // 赋值函数指针
    int result = (*funcPtr)(3, 4);  // 调用函数指针,等价于 funcPtr(3, 4)
    return 0;
}
相关推荐
求学中--10 分钟前
鸿蒙网络请求从入门到精通:HttpURLConnection+第三方库,GET/POST/文件上传全覆盖
开发语言·php·harmonyos
yaodong51815 分钟前
Gemini长上下文重塑RAG架构
开发语言·php
风味蘑菇干16 分钟前
继承 + static + final 综合应用
java·开发语言
IT策士18 分钟前
Python 面试系列:常见 100 个经典面试问题,从入门到进阶
开发语言·python·面试
想取一个与众不同的名字好难21 分钟前
QT webSocket接收客户端发送的双目摄像头数据并显示
开发语言·qt·websocket
Kiyra27 分钟前
LLM 的 JSON 不靠谱:结构化输出的重试与修复实战
开发语言·python·json
fengci.33 分钟前
CTF+随机困难部分
android·开发语言·网络·安全·php
沐风。5637 分钟前
pyton笔记
开发语言
自不量力的A同学43 分钟前
PHP 8.5.6 发布
开发语言·php
基德爆肝c语言1 小时前
Qt控件:按钮类
开发语言·qt