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>

int main(int argc, char* argv[])
{
    int nValue = 0;
    double fltValue = 3.14;
    nValue = (int)fltValue;
    return 0;
}

指针也是类型,因此也支持强制转换。以下报错:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* p1 = NULL;
    short* p2 = NULL;

    p1 = p2;
    return 0;
}

强制转换后通过编译:

#include <stdio.h>

int main(int argc, char* argv[])
{
    char* p1 = NULL;
    short* p2 = NULL;

    p1 = (char*)p2;
    return 0;
}

指向同一个地址的指针

#include <stdio.h>

int main(int argc, char* argv[])
{
    int nValue = 0x11111111;

    char* p1 = (char*)&nValue;
    short* p2 = (short*)&nValue;
    int* p3 = (int*)&nValue;

    printf("%08X\r\n", *p1);
    printf("%08X\r\n", *p2);
    printf("%08X\r\n", *p3);
    return 0;
}

指针的两个内涵

指针,作为存储地址的变量,其实有两个内涵:

  • 指向哪里
  • 解释方式

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

时间: 2024-11-09 05:58:55

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

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零基础视频-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零基础视频-33-指针的定义与使用

目录 指针的定义语法 指针指向变量地址 取变量的地址 变量地址赋值给指针变量 通过指针修改内存中的内容 指针的定义语法 指针变量中存放的是其他变量的地址,因此指针的类型,也与其要存放的地址类型有关. 有存放int型变量地址的指针,也有存放double型变量地址的指针. 具体而言,指针变量的声明语法是: 类型 * 指针变量名; 如: int *pIntValue = NULL; double *pDoubleValue = NULL; 以上分别定义了一个可以保存int变量地址以及可以保存doubl

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

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

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

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

C零基础视频-47-C语言操作文件

目录 C语言文件操作函数 fopen:打开或创建文件 fopen中的mode参数 fclose:关闭文件 C语言文件操作函数 C标准库中提供了一系列的函数,来操作文件.因为C库函数做了这个中间层,屏蔽掉了操作系统上对于文件的不同处理. 关于文件的常见基本操作有: 打开文件:创建文件或打开文件载体(磁盘)中已有的文件 关闭文件:类似free,释放掉内存中与文件有关的动态资源 读取文件:数据由文件载体(磁盘)到内存 写入文件:数据由内存到文件载体(磁盘) fopen:打开或创建文件 fopen的原型

C零基础视频-36-指针相关的运算

目录 比较大小 指针的加减法 使用指针遍历数组 比较大小 同类型的指针是可以比较大小的,不同类型的指针不能比较大小: #include <stdio.h> int main(int argc, char* argv[]) { int nValue1 = 0; int nValue2 = 0; int* p1 = &nValue1; int* p2 = &nValue2; printf("p1: %p\r\n", p1); printf("p2: %

C零基础视频-48-文件的写入与读取

目录 fread与fwrite fread与fwrite 从信息的转换角度看,文件的读取与写入,其实就是信息在文件介质(磁盘)与内存之间进行转换. 文件读取(fread),就是将磁盘中的文件内容,读取进内存中:而文件写入(fwrite),就是将内存中的内容,写入到磁盘中. 那么他们就会面临几个关键问题: 数据在磁盘哪里? 数据在内存哪里? 有多少数据? 了解以上信息后,就不难理解fread与fwrite的函数原型: size_t fwrite( const void *buffer, size_

C零基础视频-44-静态局部变量、静态全局变量、静态函数

目录 static关键字 静态局部变量 静态全局变量 静态函数 static关键字 C语言中的static关键字,有多种用于,它可以用来修饰局部变量.全局变量和函数,分别得到静态局部变量.静态全局变量和静态函数. 静态局部变量 使用static修饰局部变量,就得到静态局部变量: static int nValue = 0; 静态局部变量的特点: 只初始化一次 仅在定义的函数内可以使用 void FunTest() { static int nValue = 0; nValue++; printf