一‘指针的定义
指针是一种地址变量,通常也叫指针变量,统称指针。而地址则是地址变量的值
指针绝对不是地址,千万不要把意义给混淆了。
指针的大小就是4个字节 32位 指针里存放的是地址 他本身放在符号表中。
实际上地址就是一种基本数据类型,它应该跟整形,字符,浮点是一样的 。
■指针只是存储地址类型的变量,它不是数据类型。
由于数组名是一个符号常量,因此它是一个右值, 而指针作为变量它是一个左值
(1)int *ptr; //指针的类型是int *
(2)char *ptr; //指针的类型是char *
(3)int **ptr; //指针的类型是 int **
(4)int (*ptr)[3]; //指针的类型是 int(*)[3]
(5)int *(*ptr)[4]; //指针的类型是 int *(*)[4]
(1)int *ptr; //指针所指向的类型是int
(2)char *ptr; //指针所指向的的类型是char
(3)int **ptr; //指针所指向的的类型是 int *
(4)int (*ptr)[3]; //指针所指向的的类型是 int()[3]
(5)int *(*ptr)[4]; //指针所指向的的类型是 int *()[4]
当你对C越来越熟悉时,你会发现,把
与指针搅和在一起的“类型”这个概念分成“指针的类型”和“指针所指向的类型”两个概念,是精通指
针的关键点之一。我看了不少书,发现有些写得差的书中,就把指针的这两个概念搅在一起了,所以看起
书来前后矛盾,越看越糊涂。
指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序
里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。
指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一
片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我
们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。
指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有
了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的
二、指针作为参数
函数参数传递是值传递,头指针作为参数时,实际上是生成了一个指针的副本,
函数中是对副本进行操作,没有改变原指针的值,所以指针仍保持进入函数前的值。