C零基础视频-33-指针的定义与使用

目录

  • 指针的定义语法
  • 指针指向变量地址
    • 取变量的地址
    • 变量地址赋值给指针变量
  • 通过指针修改内存中的内容

指针的定义语法

指针变量中存放的是其他变量的地址,因此指针的类型,也与其要存放的地址类型有关。
有存放int型变量地址的指针,也有存放double型变量地址的指针。
具体而言,指针变量的声明语法是:

类型 * 指针变量名;

如:

    int *pIntValue = NULL;
    double *pDoubleValue = NULL;

以上分别定义了一个可以保存int变量地址以及可以保存double变量地址的指针。
我们常将暂时未使用的指针的值初始化为NULL,NULL其实是0:

#define NULL 0

因为在常见的操作系统中,0地址往往都是无效地址,对于暂时未使用的指针,在其内部存放一个无效地址,合乎工程逻辑。

指针指向变量地址

取变量的地址

在学习scanf时,我们已经见过&符号,它的作用是取变量的地址:

int main(int argc, char* argv[])
{
    char chValue = 0x66;
    printf("%08X\r\n", chValue); //打印chValue的值
    printf("%08X\r\n", &chValue); //打印chValue在内存中的地址
    return 0;
}

变量地址赋值给指针变量

#include <stdio.h>

int main(int argc, char* argv[])
{
    char chValue = 0x66;
    printf("%08X\r\n", chValue); //打印chValue的值
    printf("%08X\r\n", &chValue); //打印chValue在内存中的地址

    char* pCharValue = NULL;
    pCharValue = &chValue;
    printf("%08X\r\n", pCharValue); //打印出pCharValue的值,它里面保存了chValue变量的地址
    return 0;
}

像以上代码中,指针变量pCharValue中保存了chValue变量的地址,我们习惯上会称,pCharValue指针指向chValue变量

通过指针修改内存中的内容

光有地址是没有太多用处的,还需要能够读取或修改对应内存地址中的值。可以通过*操作符达到目的即:

*指针变量

可以读取或者赋值对应地址的内容:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char chValue = 0x66;
    printf("%08X\r\n", chValue); //打印chValue的值
    printf("%08X\r\n", &chValue); //打印chValue在内存中的地址

    char* pCharValue = NULL;
    pCharValue = &chValue;
    printf("%08X\r\n", pCharValue); //打印出pCharValue的值,它里面保存了chValue变量的地址

    *pCharValue = 0x55; //通过指针修改了指向内存地址处的值
    printf("%08X\r\n", chValue); //chValue的值已经被修改
    printf("%08X\r\n", *pCharValue); //也可以通过指针访问内存中的内容
    return 0;
}

原文地址:https://www.cnblogs.com/shellmad/p/11695593.html

时间: 2024-08-30 14:49:58

C零基础视频-33-指针的定义与使用的相关文章

C零基础视频-38-函数指针与typedef

目录 函数指针的定义 函数指针的复杂性 typedef 函数指针的定义 函数在内存中也是有地址的: #include <stdio.h> void fun() { printf("hello, world\r\n"); } int main(int argc, char* argv[]) { printf("%p\r\n", fun); return 0; } 既然有地址,就可以定义指针存储改地址,存储函数(首)地址的指针,称为函数指针. 函数指针的定义

C零基础视频-40-结构体指针

目录 结构体指针的定义 使用结构体指针引用结构体成员 结构体指针作为函数参数传递 结构体指针的定义 结构体指针的定义与基本数据结构的指针类似,使用"*"符号即可: #include <stdio.h> struct tagPetDog{ char szName[20]; char szColor[20]; char nWeight; }; int main(int argc, char* argv[]) { tagPetDog dog = { "旺财",

C零基础视频-39-结构体的定义与使用

目录 为什么要使用结构体 结构体的定义与使用 结构体的定义 定义结构体变量 引用结构体中的成员 为什么要使用结构体 生活中的事物,往往有多种属性,我们为了记录和表示他们,需要围绕一个事物,记录多中数据. 如一只宠物狗,他可能有:姓名.颜色.体重. 我们可以使用三个不同的变量记录它: #include <stdio.h> int main(int argc, char* argv[]) { char szName[20] = { "旺财" }; char szColor[20

C零基础视频-37-指针数组与数组指针

目录 指针数组 数组指针 指针数组 指针数组是数组,即一个数组中,每个元素都是指针. #include <stdio.h> int main(int argc, char* argv[]) { int nValue1 = 1; int nValue2 = 2; int nValue3 = 3; int * nArray[3] = { &nValue1, &nValue2, &nValue3 }; char* sz1 = "hello"; char*

C零基础视频-34-通过指针实现函数交换两个变量的值

目录 回顾:函数的值传递 使用指针交换两个变量的值 回顾:函数的值传递 因为函数的调用过程中,实参到形参是值传递,因此,改变形参,是无法影响到实参的: #include <stdio.h> void FakeSwap(int nArg1, int nArg2) { int nTemp = nArg1; nArg1 = nArg2; nArg2 = nTemp; } int main(int argc, char* argv[]) { int nValue1 = 100; int nValue2

C零基础视频-30-二维数组的定义与使用

目录 二维数组的定义 二维数组的初始化 二维数组的引用 二维数组的定义 type 数组名[行][列] 二维数组的初始化 全部初始化为0: char chAry[2][3] = { 0 }; 全部初始化为特定值: char chAry[2][3] = { 0x00, 0x01, 0x02, 0x10, 0x11, 0x12 }; 或者区分行: char chAry[2][3] = { { 0x00, 0x01, 0x02, }, { 0x10, 0x11, 0x12, } }; 略过某行,部分初始

C零基础视频-35-指向同一个地址的指针的内涵

目录 C语言中的强制类型转换 指向同一个地址的指针 指针的两个内涵 C语言中的强制类型转换 C语言中运行将数据类型强制转换,使用(TYPE) 变量的方式即可. 比如,如下有警告: #include <stdio.h> int main(int argc, char* argv[]) { int nValue = 0; double fltValue = 3.14; nValue = fltValue; return 0; } 强制转换后没有警告: #include <stdio.h>

C零基础视频-45-内存的分区:全局区、栈区、堆

目录 为什么程序的内存有分区 程序运行时的内存分区 堆内存 不久的将来,我们要开始学习在C中动态申请和释放内存.在学习它们之前,我们先学习程序内存的分区,为掌握和理解动态申请.释放内存做好基础铺垫. 为什么程序的内存有分区 一般而言,我们的住房会分成多个区域(卧室.厨房.阳台.卫生间等),不同区域有不同的功能. 运行时,程序分区的道理也是一样的,它方便操作系统管理程序,内存的不同区域,功能不同. 程序运行时的内存分区 作为初学者,我们简单认识下,程序有全局区.栈区和堆区即可. 全局区:在main

C零基础视频-27-字符串

目录 什么是字符串 C语言中的字符串 字符数组与字符串的比较 什么是字符串 之前我们已经学过单个字符的文字型数据(char).同时了解过字符串. 在C语言中,字符串用双引号包围. #include <stdio.h> int main(int argc, char* argv[]) { printf("Hello"); return 0; } 字符串不是C语言中的基本数据类型.在我们之后的学习中可以看到,它是根据约定存储多个char数据的一种方式. C语言中的字符串 为了方