精华内容
下载资源
问答
  • C语言的指针类型详解

    2021-05-23 09:19:17
    C语言的指针类型包括两方面的信息:一是地址,存放在指针变量中;二是类型信息,关乎于读写的长度,没有存储在指针变量中,位于用该指针读写时的mov指令中,不同的读写长度对应的mov指令不同。以下是百分网小编搜索...

    C语言的指针类型包括两方面的信息:一是地址,存放在指针变量中;二是类型信息,关乎于读写的长度,没有存储在指针变量中,位于用该指针读写时的mov指令中,不同的读写长度对应的mov指令不同。以下是百分网小编搜索整理的关于C语言的指针类型详解,需要的朋友可以参考一下!想了解更多相关信息请持续关注我们应届毕业生考试网!

    指针存储了内存的地址,同时指针是有类型的,如int*,float*,那么,一个自然的猜想就是指针变量应该存储这两方面的信息:地址和指针类型,比如,就像下面的结构体:

    代码如下:

    struct pointer{

    long address;

    int type;

    }

    举个例子:打印sizeof(int*),值为4,可见4字节是存储内存地址用的,反过来就说明指针并没有存储类型信息的地方,那么指针的类型信息存放在哪儿呢?

    下面剖析一段简单的代码。

    代码如下:

    // ma.cpp : 定义控制台应用程序的入口点。

    #include "stdafx.h"

    char gi;

    char *pi;

    void main()

    {

    pi=&gi;

    *pi=12;

    }

    反汇编结果:

    代码如下:

    pi=&gi;

    0041137E C7 05 78 71 41 00 7C 71 41 00 mov         dword ptr [pi (417178h)],offset gi (41717Ch)

    *pi=12;

    00411388 A1 78 71 41 00   mov         eax,dword ptr [pi (417178h)]

    0041138D C6 00 0C         mov         byte ptr [eax],0Ch

    }

    可见byte就说明了指针类型的信息。

    总结:C语言的指针类型包括两方面的信息:一是地址,存放在指针变量中;二是类型信息,关乎于读写的长度,没有存储在指针变量中,位于用该指针读写时的mov指令中,不同的读写长度对应的mov指令不同。

    另外:在指针强制转换时,也是这个原理。就是指针强制转换的影响不是在转换的时候发生,而是在用转换后的身份去访问内存时体现到了指令中。

    那么指针在什么情况下转换是安全的呢?就是看用这个转换后的身份去访问内存是否安全。

    简要的说有以下原则:如果转换后指针指向的数据类型大小小于原数据类型大小,那么用该转换后的指针访问就不会越过原数据的内存,是安全的,否则危险,要越界。

    [C语言的指针类型详解]相关文章:

    展开全文
  • 满意答案yzod869792013.03.11采纳率:54%等级:12已帮助:18765人pascal语言中指针类型和动态数据结构 整型、实型、布尔型等各种简单类型和数组、记录、集合等各种结构类型的数据都属于静态类型的数据。所谓静态类型...

    满意答案

    00e27ab806e4881f8254fe7ae8741834.png

    yzod86979

    2013.03.11

    00e27ab806e4881f8254fe7ae8741834.png

    采纳率:54%    等级:12

    已帮助:18765人

    pascal语言中指针类型和动态数据结构 整型、实型、布尔型等各种简单类型和数组、记录、集合等各种结构类型的数据都属于静态类型的数据。所谓静态类型数据是指使用前必须在程序的说明部分给出描述这种数据的类型说明(TYPE语句)或变量说明(VAR语句),以定义这类数据占用内存空间的大小规模,使系统在程序的编译阶段能对这些变量进行内存空间的分配,空间一旦分配则不能在程序的执行过程中加以改变。现在讨论另一种类型的数据,这些数据和静态类型数据不同,它们无需在程序的变量说明部分对其进行说明,也就是系统在程序编译阶段不对这些变量分配内存空间,而是在程序的运行过程中根据需要用相应的命令动态地建立、分配内存空间,以至这种类型的数据占用内存空间的大小规模可以动态地发生变化,故称之为动态类型数据结构。 一、指针变量以及动态数据的产生 讨论动态类型数据是如何在程序的运行阶段动态地建立起来的,就要讨论与之有关的一种静态类型数据 指针。 指针类型属于静态的简单类型,但和整型、实型、字符型这些简单类型不同。首先整型、实型、字符型的变量单元中存放的是相应类型的数据,而指针类型变量单元中存放的是某种类型变量单元的地址,通过该地址可以找到这种类型的数据,所以称它是一个指针,而这种数据就是动态数据;其次整型、实型、字符型等类型都有规定的标准标识符integer、real、char等与之对应,而指针类型则没有相应的标准标识符。这是因为在动态数据产生的过程中,程序员关心的是指针指向一个什么类型的数据。所以,在Pascal程序说明部分定义指针类型时必须给出该指针类型变量所指向的数据类型,即该指针类型标识何种类型的变量。 如在程序的类型说明部分有: TYPE pint=^integer; pre=^real; 表明程序定义了两种指针类型pint和pre。pint用于标识整型的变量,pre用于标识实型的变量。 若在程序的变量说明部分有指针类型变量的说明: VAR p1,p2:pint; q:pre 表明程序定义了三个指针变量,p1和p2是pint类型的变量,q是pre类型的变量。在程序的编译阶段,同其它简单变量(整型、实型、字符型等)一样,系统要给它们分配空间,这就是前面所说的指针变量是静态变量。在内存空间分配之初,p1、p2和q变量单元还未定义,此时指针变量不指向任何一个内存变量单元,因为所需指向的动态数据单元还未产生,它们是在程序运行过程中利用p1、p2和q变量以及new过程语句动态地产生的。一旦有动态数据产生,则p1、p2变量单元中将存放动态产生的整型变量单元的地址,q变量单元中将存放动态产生的实型变量单元的地址。 动态数据的产生是系统在程序运行阶段执行过程语句new()时进行,所产生的动态数据单元用:“^” 来命名: new(p1):系统动态地产生整型变量单元,即动态地给一个整型变量分配内存单元,并将该单元的地址放入p1单元中。该整型变量单元命名为p1^,表明通过p1指针可访问这个单元的整型数据。 new(q):系统动态地产生实型变量单元,即动态地给一个实型变量分配内存单元,并将该单元地址放入q单元中。该实型变量单元命名为q ^,表明通过q指针可访问这个单元的实型数据。 二、指针类型变量的应用以及动态数据的操作 下面讨论指针类型变量的应用,即如何将整型数据或实型数据等存放到动态产生的相应的内存变量单元中,并对这些单元进行必要的操作。 首先可以用赋值语句将一个指针变量的地址值赋给另一个指针变量,如: p2:=p1,表示将p1单元的地址值赋给p2,此时p2单元的内容也是指向某整型变量单元的地址值。 但p1:=q不行,因为在定义中可见两指针类型所标识的类型变量不同。 下面通过一个简单的例子看指针类型变量的应用: PROGRAM EX00(OUTPUT); TYPE pint=^integer; pre=^real; VAR p:pint; q:pre; BEGIN NEW(p); p^ :=3; NEW(q); q^ :=4.5; q^:=q^* p^; WRITELN(q^); DISPOSE(p);DISPOSE(q) END. 最后语句DISPOSE(p)以及DISPOSE(q)为释放由p和q指针所指向的变量单元。 指

    如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la

    010分享举报

    展开全文
  • 指针类型的意义

    2021-03-27 00:43:33
    char*类型指针是为了存放char类型变量的地址 int*类型指针是为了存放int*类型变量的地址 1.指针+-整数 int main() { int a = 0x11223344; int* pa = &a; char* pc = (char*)&a; printf("%p\n...

    指针的定义方式:type+*

    char*类型的指针是为了存放char类型变量的地址

    int*类型的指针是为了存放int*类型变量的地址

     

    1.指针+-整数

    int main()
    
    {
    
            int a = 0x11223344;
    
            int* pa = &a;
    
            char* pc = (char*)&a;
    
            printf("%p\n", &a);//  005DFBAC
    
            printf("%p\n", pa);//  005DFBAC
    
            printf("%p\n", pa+1);//005DFBB0
    
            printf("%p\n", pc);//  005DFBAC
    
            printf("%p\n", pc+1);//005DFBAD
    
            return 0;
    
    }

    指针的类型决定了指针走一步走多远(指针的步长)

    int*p;p+1->4

    char*p;p+1->1

    double*p;p+1->8

     

    2.指针解引用

    int main()
    
    {
    
            int n = 0x11223344;
    
            char* pc = (char*)&n;
    
            int* pa = &n;
    
            *pa = 0;// 00 00 00 00
    
            *pa = 0;// 00 33 22 11
    
            return 0;
    
    }

    指针类型决定了对指针解引用的时候能操作几个字节

    char*的指针解引用就只能访问一个字节

    int*的指针解引用就能访问四个字节

     

    指针类型的意义:

    1.指针的类型决定了指针走一步走多远(指针的步长)

    2.指针类型决定了对指针解引用的时候能操作几个字节

    展开全文
  • 指针存储了内存的地址,同时指针是有类型的,如int*,float*,那么,一个自然的猜想就是指针变量应该存储这两方面的信息:地址和指针类型,比如,就像下面的结构体:struct pointer{long address;int type;}举个例子...

    指针存储了内存的地址,同时指针是有类型的,如int*,float*,那么,一个自然的猜想就是指针变量应该存储这两方面的信息:地址和指针类型,比如,就像下面的结构体:

    struct pointer{

    long address;

    int type;

    }

    举个例子:打印sizeof(int*),值为4,可见4字节是存储内存地址用的,反过来就说明指针并没有存储类型信息的地方,那么指针的类型信息存放在哪儿呢?

    下面剖析一段简单的代码。

    // ma.cpp : 定义控制台应用程序的入口点。

    #include "stdafx.h"

    char gi;

    char *pi;

    void main()

    {

    pi=&gi;

    *pi=12;

    }

    反汇编结果:

    pi=&gi;

    0041137E C7 05 78 71 41 00 7C 71 41 00 mov         dword ptr [pi (417178h)],offset gi (41717Ch)

    *pi=12;

    00411388 A1 78 71 41 00   mov         eax,dword ptr [pi (417178h)]

    0041138D C6 00 0C         mov         byte ptr [eax],0Ch

    }

    可见byte就说明了指针类型的信息。总结:C语言的指针类型包括两方面的信息:一是地址,存放在指针变量中;二是类型信息,关乎于读写的长度,没有存储在指针变量中,位于用该指针读写时的mov指令中,不同的读写长度对应的mov指令不同。

    另外:在指针强制转换时,也是这个原理。就是指针强制转换的影响不是在转换的时候发生,而是在用转换后的身份去访问内存时体现到了指令中。

    那么指针在什么情况下转换是安全的呢?就是看用这个转换后的身份去访问内存是否安全。简要的说有以下原则:如果转换后指针指向的数据类型大小小于原数据类型大小,那么用该转换后的指针访问就不会越过原数据的内存,是安全的,否则危险,要越界。

    展开全文
  • 指针类型的数组

    2021-05-19 20:34:55
    定义数组的时候,我们需要指定数组中存放元素的类型。例如: int array[6]; //定义数组,数组有6个元素,元素是int类型;...那么,学习了指针之后,我们知道指针也是一种数据类型,例如: int* p; ...
  • void指针类型强制转换

    千次阅读 2021-05-20 12:30:15
    如何将一个void*强制转换成行指针类型?void*指针可以转换成任何类型的指针。 强制转换即可,比如 (int *)(void *)p; 假设你的数组有N行M列的int型数据。 int arr[N][M]; int (*p)[M]=arr; 假设pV为一个void型指针 p...
  • 对于指针:定义指针时,要明确指针类型指针指向的类型指针类型:直接去掉变量名,剩下的就是指针类型指针指向的类型:去掉变量名后,在去掉一个 , 对于数组:同理,定义一个指针指向一个数组时,首先...
  • 指针类型的作用

    2021-02-25 19:19:51
    1.决定了访问字节数的大小 具体分析 char只能访问1个字节的 int可以访问4个字节的 总结 决定了走的长度
  • 关于所有指针类型的那些运算

    千次阅读 2021-04-06 18:02:39
    指针指针就是指向指针指针 结构指针就是指向结构的指针 数组指针就是指向数组的指针 函数指针就是指向函数的指针 对这些说法展开的讨论: 那这个定义这么写的话,那是不是还可以这么写:指针指针就一定要...
  • 几种常见的指针类型

    千次阅读 2021-04-15 19:57:15
    表示一个指向有10个整型数数组的指针,强调是指针,只有一个变量,是指针类型,不过指向的是一个int类型的数组,这个数组大小是10。 3、int *p(int) 是函数声明,函数名是p,参数是int类型的,返回值是int *类型的。...
  • 我查找了类似的问题,但问题始终是指针类型不同于原始函数,但在本例中,它们都是 void* 论点是一致的,所以我不知道问题出在哪里。 调用如下(编译器没有抱怨,我检查了每次调用正确的函数): (*ParseConfigGeneric)(num_...
  • 数据类型: 指针类型1.基本数据类型整型实型字符型布尔型字符串枚举类型2.构造类型数组结构体联合体3.指针类型指针是一种特殊的数据类型,存储是 不是一个具体的数值,非数值数据,是内存地址。3.1 指针类型的变量...
  • C语言指针类型和所指数据的类型必须要一致吗 网上很多答案是:”必须,不一致会出现语法错误“,但是 no try no know。 首先看下我的环境: 下面是代码: #include <stdio.h> int main () { double var_...
  • 摆脱typedef,它应该变得更加清晰:void P (const int A [][10]){}int main(void){int A[10][10];P(A);...此指针类型与从main传递的内容不兼容,因为该数组衰减为int(*)[10]类型的数组指针.有一个规...
  • KeilC的指针类型

    2021-05-26 03:50:31
    Hanny在这里只想小结一下KeilC中的指针类型。在KeilC中,我们会常见到下述的指针定义方式:char*ptr1;charcode*ptr2;chardata*ptr3;charxdata*ptr4;char*dataptr5;charcode*dataptr6;chardata*da...
  • t := make([]*test, 0) pv1 := reflect.ValueOf(&t) fmt.Println(pv1.Kind()==reflect.Ptr)
  • 打代码调试的时候弹出来的,找了半天在哪出错了,确实个低级错误 一般是数组和其他的变量重名了 在这里插入图片描述 但是在他的这个提示里面红线是标在这个位置的,开始用的i还以为是i的问题,原来是t的问题,和...
  • 如以下代码,当class A中有数据成员是class B时,我们在A中定义成员变量的时候,是应该使用B的指针类型、引用类型还是直接使用类型B呢? class B{ public: int _int_elem;; double _double_elem; }; // 方式一 /...
  • 为什么所有的指针都是8个字节呢? 因为地址都是8个字节的,指针是放地址的。
  • /*魔方阵*/ #include int main() { int i,j,a,n; int arr[100][100];... } vc++2008编译,如下错误提示:error C2109: 下标要求数组或指针类型 ◆◆ 评论读取中.... 请登录后再发表评论! ◆◆ 修改失败,请稍后尝试
  • 求c语言改错 error C2109: 下标要求数组或指针类型?/*魔方阵*/#include int main(){int i,j,a,n;int arr[100][100];printf("请输入n,n为100内奇数\n");scanf("%d\n",n);for(i=1;i<=n;i++)for(j=1;j<=n;j++)a...
  • void指针类型

    2021-09-07 16:45:10
    void指针类型作用 void指针为无类型指针,可以指向任何类型数据。 作用 C语言中引入void指针类型在于两个方面 对函数返回的限定 对函数参数的限定 此外,一般只能用指向相同类型的指针给另一个指针赋值,而在不同...
  • 来声明一个指针类型的变量试试,如下所示: var sp *string 发现也是可以的,但是它同样没有被初始化,所以它的值是 *string 类型的零值,也就是 nil。 2. 变量初始化 变量可以通过 = 运算符赋值,也就是修改变量的...
  • 一、指针类型变量、 二、使用 * 操作内存、
  • C语言的指针类型解析

    2021-05-21 04:22:16
    C语言的指针类型解析大家知道C语言的指针有哪些类型吗?下面小编为大家整理了C语言的指针类型解析,希望能帮到大家!指针存储了内存的地址,同时指针是有类型的,如int*,float*,那么,一个自然的猜想就是指针变量...
  • 指针类型问题

    2021-03-25 20:58:20
    指针类型问题 指针的类型决定了指针进行解引用的时候 可以访问的内存的大小 示例: int*的指针类型解引用的时候 可以访问4个字节的大小 char*的指针类型解引用的时候 可以访问1个字节的大小 指针类型决定了指针的...
  • C++之指针类型

    2021-07-15 17:28:24
    C++之指针类型空指针指针的算术运算 空指针 编写程序时,若指针变量没有初始化,那么可以为其赋值为nullptr,赋为nullptr值的指针被称为空指针。 系统不允许程序访问地址为0(空指针)的内存,所以空指针指向的是不可...
  • 指针类型

    2021-11-23 12:04:18
    1、int *p (1)指向变量 (2)指向数组元素 (3)指向字符串 2、int (*p)[10] 指向长度为10的数组 ...长度为10的指针数组,包含10个指针 4、int (*p)() 指向返回值为整型的函数 5、int *p() 返回值为指针的函数 ...
  • 一、使用 数组指针类型 定义数组指针、 二、完整代码示例

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,261,465
精华内容 504,586
关键字:

指针类型