C语言指针学习(-)

来源:互联网 发布:mac忘记了管理员密码 编辑:程序博客网 时间:2024/05/21 15:46

一、首先理解几个概念:

1、指针常量、常量指针、指针变量。

关键:const关键字的含义。

(1)指针常量:指针自身不可改变;

定义:int * const p//p值一旦初始化,不可改变;

以下是在VS2015中编译:

#include "stdio.h"int main() {int arr[] = { 1,2,3,4,5 };int * const p = arr;p++;//vs2015:erro C2166: l-value specifies const object/*注释本行方可运行*/*p = 8;//ok printf("%d", *p);//output:8while (1);return 0;}
注意语义:const修饰的是p,所以p不可改变,理所当然。

(2)常量指针:指针指向的对象(内容)不可改变;

定义:int const *p = arr;//arr为地址

以下是在VS2015中编译:

#include "stdio.h"int main() {int arr[] = { 1,2,3,4,5 };int const *p = arr;p++;//ok!*p = 8;//error C2166: l-value specifies const object /*注释本行方可运行*/printf("%d", *p);//output:2while (1);return 0;}

注意语义:const修饰的是*p,所以*p不可改变,理所当然。

:如下,可猜到,p,和*p都不可改变。

int const * const p;

那么 数组是什么指针?

#include "stdio.h"int main() {int arr[] = { 1,2,3,4,5 };int a = 8;arr++;// error C2105: '++' needs l-valuearr = &a; //error C2106 : '=' : left operand must be l - value}

可以看到,arr是指向常量的指针常量;如上[注]中。

(3)指针变量指针变量是用来存放地址的变量。我们常说的指针是指针变量的简称

定义:

int *p;char *p;int **p;char **p;//等等

二、指针 

指针即指针变量

以下是指针的一些概念:

(1)指针的类型。

(2)指针所指向的类型。

(3)指针的值(指针所指向的内存区)。

(4)指针本身所占内存。

int*p;          char*p;        int**p;        int(*p)[3];   int*(*p)[4]; 
以上是几个实例

指针的类型

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。

int*p;          //指针类型:int*;char*p;        //指针类型:char*;  int**p;        //指针类型:int**;  int(*p)[3];   //指针类型:int(*)[3];int*(*p)[4];  //指针类型:int*(*)[4];

指针指向的类型

从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型

int*p;          //指针指向的类型:int;char*p;        //指针指向的类型:char;  int**p;        //指针指向的类型:int*;  int(*p)[3];   //指针指向的类型:int()[3];int*(*p)[4];  //指针指向的类型:int*()[4];

指针的值--或者叫指针所指向的内存区或地址

指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。

指针本身所占据的内存区

指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在32位平台里,指针本身占据了4个字节的长度。



0 0
原创粉丝点击