首页 > 编程语言 > 详细

c中指针----------指针、指针的指针、指针数组和数组指针

时间:2015-12-07 00:52:17      阅读:229      评论:0      收藏:0      [点我收藏+]

一、指针

  如果在程序中定义一个变量,在对程序进行编译,系统会自动给这个变量分配内存单元,根据不同的类型,分配不同长度的空间,如int占用4个字节,char占用1个字节。内存单元中每个字节都有编号,这就是地址。由于可通过地址能够找到所需的变量单元,可以说地址指向该变量单元。打个比方,一个房间的门口挂了一个房间号301,这个301就是房间的地址,将该地址形象化为指针对于一个内存单元来说,单元的地址(编号)即为指针,其中存放的数据才是该单元的内容。

  严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。为了避免混淆,约定:“指针”是指地址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元。

例如:

   int a=12;

   int *p=&a;

二、指针的指针(二级指针)

   简单来说,二级指针变量就是一级指针变量的地址。

例如:

  int a=12;

  int *p=&a;

  int **=&p;

技术分享

         表达式                       相当的表达式
          a          12
          p          &a
         *p         a,12
          c         &p
          *c         p,&a
          **c

         *p,a,12


三、指针数组和指针数组

int q[10];     //数组

int *p[10];    //指针数组

int (*r)[10];   //指针数组

技术分享

例如:

#include<stdio.h>
int main()
{
	int a[4]={1,2,3,4};
	int *ptr1=(int *)(&a+1);
	int *ptr2=(int *)((int)a+1);
	printf("%x,%x\n",ptr1[-1],*ptr2);
	return 0;
}

技术分享

技术分享


本文出自 “朔月云影” 博客,请务必保留此出处http://19940325.blog.51cto.com/10789287/1720046

c中指针----------指针、指针的指针、指针数组和数组指针

原文:http://19940325.blog.51cto.com/10789287/1720046

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!