首页 > 其他分享 >嵌入式初学-C语言-十九

嵌入式初学-C语言-十九

时间:2024-08-09 22:52:48浏览次数:6  
标签:变量 int 嵌入式 访问 地址 初学 内存 C语言 指针

指针的引入

  1. 为函数修改实参提供支持
  2. 为动态内存管理提供支持
  3. 为动态数据及结构提供支持
  4. 为内存访问提供另一种途径

指针的概述

内存地址:

系统为了内存管理的方便将内存划分为一个个内存单元(一个内存单元占一个字节),并为每一个内存单元进行了编号,内存单元的编号称为该内存单元的地址。一般情况下,我们每一个变量都是有多个内存单元构成的,所以每个变量的内存地址其实就是这个变量对应的第一个单元的地址,也叫首地址

变量指针

变量地址称为该变量的指针,变量地址往往是指变量在内存中第一个内存单元的编号(首地址)

指针变量

       存放其他变量地址的变量

指向

       指针变量存放谁的地址,就说明该指针变量指向谁

指针运算符‘*’

案例:

/**
* 指针 初识
*/
#include <stdio.h>

void main()
{

    // 定义一个普通/一般变量
    int i = 3;
    // 定义一个指针变量,并赋值
    int *i_point = &i; // 指针变量的数据类型要和存储的地址变量类型一致
    // 访问普通变量(直接访问)
    printf("直接访问-%d\n",i); // 3
    // 访问指针(地址访问)%p访问地址
    printf("地址访问-%p\n",i_point);
    // 访问指针变量(间接访问)
    printf("间接访问-%d\n",*i_point); // 3
}

指针变量的定义

语法:

       数据类型 * 变量列表

举例:

int a; // 普通变量

int *a,*b; // 指针变量

注意:

  1. 虽然定义指针变量*a,是在变量名前加*,但是实际变量名为a,而不是*a,
  2. 使用指针变量间接访问内存数据时,指针变量必须要有明确的指向
  3. 如果想借助指针变量间接访问指针变量保存的地址上的数据,可以使用指针变量前加*来直接访问;指针变量前加*;也称为对指针变量解引用
int i = 5, *p;
p = &i; // 将i的地址赋值给指针变量p
printf("%d\n",*p);// 间接访问i的值,也称为解引用p对应地址空间的值

     4. 指针变量只能指向同类型的变量,借助指针变量访问内存一次访问的内存大小是取决于指针变量的类型

     5.指针变量在定义同时可以初始化:这一点和普通变量是一样的

int i = 5;
int *p = &i; // 定义的同时初始化

指针变量的使用

指针变量的赋值:

// 方式1
int a,*p;
p = &a; // 指针变量的值是其他变量的地址
// 方式2
int a,*p,*q = &a;
p = q;

操作指针变量的值:

int a,*p,*q = &a;
p = q;
printf("%p",p); // 此时返回的是变量a的地址空间

两个有关运算符的使用:

  •  &  取地址运算符。 &a是变量a的地址。
  •  *  指针运算符 (或称“间接访问”运算符),*p是指针变量p指向的对象的值。

 案例:

指针变量做函数的参数

指针变量做函数参数往往传递的是变量的地址(首地址),借助于指针变量间接访问是可以修改实参的变量数据的

两个有关运算符的使用

& 取地址运算符。 &a是变量a的地址。

* 指针运算符 (或称“间接访问”运算符),*p是指针变量p指向的对象的值。

案例:

#include <stdio.h>
void main()
{
int a,b;
int *pointer_1, *pointer_2;
a=100; b=10;
pointer_1=&a;
pointer_2=&b;
printf("a=%d,b=%d\n",a,b);
printf("pointer_1=%d,pointer_2=%d\n",*pointer_1,*pointer_2);
}

标签:变量,int,嵌入式,访问,地址,初学,内存,C语言,指针
From: https://blog.csdn.net/MaBaB/article/details/141072521

相关文章

  • 贪吃蛇小游戏(c语言实现,巨细详解,附完整代码)
    文章目录c语言简单实现贪吃蛇(巨细详解,附完整代码)==前言==一、游戏效果及功能实现:1、规则:2、基本功能实现:3、技术要点4、实现思路5、游戏效果呈现二、Win32API介绍1、简单介绍2、控制台程序(Console)cmd命令窗口打开方式:控制cmd控制台长宽度命令title命令(命名)3、vs中的控......
  • C语言(五)-结构体
    C语言(五)-结构体1.结构体定义在编程的时候需要将不同的类型的数据组合成为一个整体,以便于引用。例如,一名学生有学号、姓名、性别、年龄、地址等属性,如果针对学生的学号、姓名、年龄等都单独定义一个变量,那么在有多名学生时,变量就难以分清。为此,C语言提供结构体来管理不同类......
  • C语言入门零基础:6、运算符
    一、运算符分类:        1、赋值运算符:=         2、算术运算符:+-*/%(取余取模)        3、关系运算符:> >= < <= ==!=        4、逻辑运算符:&& ||!        5、其他运算符:++--?: 复合 += -= ......
  • C++入门:C语言到C++的过渡
    前言:C++——为弥补C缺陷而生的语言        C++起源于1979年,当时BjarneStroustrup在贝尔实验室工作,面对复杂软件开发任务,他感到C语言在表达能力、可维护性和可扩展性方面存在不足。        1983年,BjarneStroustrup在C语言基础上添加面向对象编程......
  • C语言动态内存管理超详解
    文章目录1.为什么要有动态内存分配2.malloc和free2.1malloc2.2free3.calloc和realloc3.1calloc3.2realloc4.常见动态内存错误4.1对NULL指针的解引用操作4.2对动态开辟空间的越界访问4.3对非动态开辟内存使用free释放4.4使用free释放一块动......
  • 如何在 Windows 10 环境下安装和配置 MySQL:初学者指南
    如何在Windows10环境下安装和配置MySQL:初学者指南MySQL是一个流行的开源数据库管理系统,广泛应用于各种应用程序中。对于初学者来说,了解如何在Windows10环境下安装和配置MySQL是一个重要的第一步。本篇博客将详细介绍如何完成这些步骤,确保你能顺利地启动和使用MySQL......
  • C语言---指针的运算和各种类型的指针
    指针的运算1.指针+1或者指针-1是什么意思?把指针中记录的内存地址,往后或者往前移动一个步长2.什么是步长?跟什么有关?跟数据类型有关Windows64位操作系统:char:移动一个字节short:移动两个字节int:移动四个字节long:移动四个字节longlong:移动八个字节有意义的操作......
  • 字符函数和字符串函数(C语言)
    目录一.字符分类函数二.字符转换函数三.多种函数的使用和模拟实现3.1strlen函数3.2strcpy函数3.3strcat函数3.4strcmp函数3.5 strncpy   strncat   strncmp ......
  • C语言试题汇编 答案 9.192&9.193
    9.192有4名学生,每个学生考4门课程,要求在用户输入学生序号以后能输出该学生的全部成绩,用指针型函数实现。#include<stdio.h>float*search(float(*pointer)[4],intn);intmain(){ staticfloatscore[][4]={{60,70,80,90},{50,89,67,88},{34,78,67,88},{80,90,100,70}}; ......
  • 【迅为电子】IMX6ULL开发板嵌入式linux开发指南第七章 Linux 常用命令第一部分
        物联网时代,各种传感器的采集和处理技术是需要我们掌握的,迅为IMX6ULL开发板标配了各种传感器设备,包括陀螺仪、重力加速度计和光传感器、红外接收、EEPROM存储,也可以选配温湿度传感器,其他如摄像头(含CMOS和USB两种)、VGA显示、GPS定位功能、RFID门禁、继电器输出、步进电......