指针是指针,数组是数组
指针篇
究竟什么是指针?什么是数组?指针和数组是什么关系?
维基百科上面是这样给指针一个概论:在计算机科学中,指针是一种最简单形式的引用(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的大小一样大
程序运行结果:
很明显,推翻了假设,数组名不是指针。