首页 > 其他分享 >C语言指针详解:用法与实例

C语言指针详解:用法与实例

时间:2024-11-13 10:44:45浏览次数:3  
标签:arr 变量 int C语言 详解 printf ptr 指针

目录

C语言指针详解:用法与实例

引言

1. 指针基础

1.1 什么是指针?

1.2 如何声明指针?

1.3 获取变量的地址

1.4 解引用指针

2. 指针的高级用法

2.1 指针和数组

2.2 指针和函数参数

2.3 指针和动态内存分配

3. 指针的注意事项

3.1 空指针

3.2 悬空指针

3.3 指针运算


C语言指针详解:用法与实例

引言
  • 指针是C语言中一个非常强大但又容易让人困惑的概念。
  • 正确理解和使用指针可以极大地提高程序的效率和灵活性。
  • 本文将详细介绍C语言中指针的基本概念、用法以及一些实用的例子。
1. 指针基础
1.1 什么是指针?
  • 指针是一个变量,它的值是另一个变量的地址。
  • 指针变量的类型必须与它指向的变量类型一致。
1.2 如何声明指针?
int *ptr;    // ptr 是一个指向 int 类型的指针
char *p;     // p 是一个指向 char 类型的指针
float *f;    // f 是一个指向 float 类型的指针
1.3 获取变量的地址
  • 使用 & 运算符可以获取变量的地址。
int num = 10;
int *ptr = #  // ptr 存储 num 的地址
1.4 解引用指针
  • 使用 * 运算符可以解引用指针,访问指针所指向的变量的值。
int num = 10;
int *ptr = #
printf("Value of num: %d\n", *ptr);  // 输出 10
2. 指针的高级用法
2.1 指针和数组
  • 数组名本身就是一个指向数组第一个元素的指针。
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;  // 或者 int *ptr = &arr[0];
for (int i = 0; i < 5; i++) {
    printf("%d ", *(ptr + i));  // 输出 1 2 3 4 5
}
2.2 指针和函数参数
  • 指针可以用来传递变量的地址,从而在函数中修改变量的值。
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 10, y = 20;
    swap(&x, &y);
    printf("x = %d, y = %d\n", x, y);  // 输出 x = 20, y = 10
    return 0;
}
2.3 指针和动态内存分配
  • 使用 malloc 和 free 函数可以动态分配和释放内存。
#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr = (int *)malloc(sizeof(int));
    if (ptr == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }
    *ptr = 100;
    printf("Value at allocated memory: %d\n", *ptr);
    free(ptr);  // 释放内存
    return 0;
}
3. 指针的注意事项
3.1 空指针
  • 指针在使用前应该初始化,避免使用未初始化的指针。
int *ptr = NULL;
if (ptr != NULL) {
    printf("Pointer is not null\n");
} else {
    printf("Pointer is null\n");  // 输出 Pointer is null
}
3.2 悬空指针
  • 指针指向的内存被释放后,指针变成悬空指针,不应该再使用。
int *ptr = (int *)malloc(sizeof(int));
*ptr = 100;
free(ptr);
// ptr 现在是悬空指针,不应该再使用
3.3 指针运算
  • 指针可以进行加减运算,但需要注意边界条件。
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
ptr++;  // ptr 现在指向 arr[1]
printf("Value at arr[1]: %d\n", *ptr);  // 输出 2

标签:arr,变量,int,C语言,详解,printf,ptr,指针
From: https://blog.csdn.net/licy__/article/details/143732819

相关文章

  • 【0x001A】HCI_Write_Scan_Enable详解
    目录一、命令概述二、命令格式及参数说明2.1. HCIWriteScanEnable命令格式2.2. Scan_Enable三、响应事件及参数说明3.1. HCI_Command_Complete事件3.2. Status四、命令执流程4.1.命令发起与准备4.2.命令传输4.3.命令接收与解析(蓝牙控制器端)4.4.扫描功能......
  • ES6常见语法详解
    原文链接:ES6常见语法详解–每天进步一点点0.什么是ES6ES的全称是ECMAScript,它是由ECMA国际标准化组织,制定的一项脚本语言的标准化规范。ES6实际上是一个泛指,泛指ES2015及后续的版本。1.let、const、var的区别let是es6中新增的语法let只对当前区块定义有效:......
  • 【金融风控】特征评估与筛选详解
    内容介绍掌握单特征分析的衡量指标知道IV,PSI等指标含义知道多特征筛选的常用方法掌握Boruta,VIF,RFE,L1等特征筛选的使用方法【理解】单特征分析什么是好特征从几个角度衡量:覆盖度,区分度,相关性,稳定性覆盖度采集类,授权类,第三方数据在使用前都会分析覆盖度采......
  • 【金融风控】特征构造及代码详解
    介绍知道未来信息的概念,及处理未来信息的方法掌握从原始数据构造出新特征的方法掌握特征变换的方法掌握缺失值处理的方法【理解】数据准备风控建模特征数据数据来源人行征信数据查询原因包括:贷款审批、贷后管理、信用卡审批、担保资格审查、司法调查、......
  • HarmonyOS蓝牙串口协议(SPP)详解:实现设备间可靠数据交换
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在智能设备互联互通的世界里,蓝牙技术扮......
  • Vue自定义指令详解——以若依框架中封装指令为例分析
    自定义指令在Vue.js中,自定义指令提供了一种非常灵活的方式来扩展Vue的功能。以下是对Vue中自定义指令的详细解释:一、自定义指令的基本概念自定义指令允许开发者直接对DOM元素进行低层次操作,而无需编写大量的模板或者JavaScript代码。它们可以响应Vue的响应式系统,从而在数据......
  • 可能是全网最详细的C语言函数全解析
    前言C语言中的函数是构建程序的基石,它就像一个个小工具,每个函数都有特定的功能,把这些小工具合理地组合起来就能构建出复杂而强大的程序。理解函数对于掌握C语言至关重要,这篇博客将详细介绍C语言函数的各个方面。一.函数的概念 1.定义   ①在C语言中,函数是......
  • C语言——函数基本知识(三)
            上篇文章我们介绍了函数递归的使用,接下来我们再来讲解一些有关递归的习题。一.求n的阶乘    阶乘是指:n*(n-1)*(n-2)*······*2*1。    首先我们可以先利用循环实现上面的代码。代码如下:​intmain(){ intn=0; inta; intj=1......
  • 使用Java填充Word模板的方法详解
    From: https://www.jb51.net/program/324679hhw.htmJava填充Word模板是一种将动态数据插入到Word文档模板中生成最终文档的过程,通常用于批量创建包含个人信息、报告结果或其他动态内容的文档,本文给大家介绍了使用Java填充Word模板的方法,需要的朋友可以参考下 +目录概......
  • 数组指针与指针数组
    一、指针数组指针数组是一个数组,其中每个元素都是一个指针。这种数组可以用来存储多个指针,每个指针可以指向不同的数据类型。#include<iostream>usingnamespacestd;intmain(){inta=10,b=20,c=30;int*ptr_array[3];//定义一个指针数组,包含3个......