指针 & 数组

 

指针是指针,数组是数组

指针篇

究竟什么是指针?什么是数组?指针和数组是什么关系?

 

       维基百科上面是这样给指针一个概论:在计算机科学中,指针是一种最简单形式的引用(reference)。指针有两种含义,一是作为数据类型,二是作为实体。前者如字符指针、浮点指针等等;后者如指针对象、指针变量等。

指针作为数据类型,可以从一个函数类型、一个对象类型或者一个不完备类型中导出。从中导出的数据类型称之为被引用类型(referenced type)。指针类型描述了一类的对象,对象值为对被引用类型的实体的引用。

单靠概论的话,相信很多人跟我一样都是黑人问号脸.jpg.

指针就是一个数据类型,组成形式为 (数据类型 *)变量 ,用那么其大小是多少呢,可以测试一下

测试程序

#include <stdio.h>

void main(void)

{

    int    *p0;

    char   *p1;

    float  *p2;

    double *p3;

    long   *p4;

    printf("sizeof(p0) = %d\n",sizeof(p0));

    printf("sizeof(p1) = %d\n",sizeof(p1));

    printf("sizeof(p2) = %d\n",sizeof(p2));

    printf("sizeof(p3) = %d\n",sizeof(p3));

    printf("sizeof(p4) = %d\n",sizeof(p4));

    return 0;

}

从编译器可以看出只要是指针类型,其大小是固定的都是为8个字节

从这里可以看出指针类型类型的变量大小是固定的,跟‘*’前的数据类型无关,‘*’前的数据类型只是限制了放入指针指向的地址中的值的类型。绕口?看图


到这里,就可以简单地认为指针就是一个基本的数据类型加上‘*’号,而且指针类型的大小是固定的,基础类型限制了指针指向的地址的中存放的数据的类型。

数组名是指针?

    这个问题其实很好验证,应用反证法,我们先假设数组名就是指针

程序测试:

#include <stdio.h>

void main(void)

{

    char str[10];

    char *p;

    p = str;

    printf("sizeof(p) = %d\n",sizeof(p));

    printf("sizeof(str) = %d\n",sizeof(str));

    return 0;

}

程序中我将数组名 str 赋给 p,按照先前的假设,这里的p应该跟str的大小一样大

程序运行结果:

很明显,推翻了假设,数组名不是指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值