指针和数组的关系

1.一维数组

Int  a[5]={1.2.3.4.5};

1)( P=&a[0]和p=a等价)

在C语言中数组名就是该数组的首地址

2)printf("%d",a[1]);

printf("%d",*(a+1)); 当我们以前使用a[1]的时候,

事实上计算机内部自动将其转换为*(a+1)

3) int a=[5];

int i,*p=a;

for(i=0;i<5;i++,p++){

scanf("%d",p);

}

for(i=0;i<5;i++,p++){

Printf("%d",*p);

注释里的内容不能够删除否则指针变量p就会指超出到a数组

4)上面程序p++不能换成a++

(因为p是指针变量。本身的值是可以变化的,

a虽然也是地址。But他是一个常量不能对一个常量自减或者自加)

2.二维数组

在二维数组中第一个下标代表行地址

第二个下标代表列地址

Eg: int a[2][3]={1,2,3,4,5,6};

a[0]代表第一行的首地址

a[1]代表第二行的首地址

printf("%d",*(a[0]+2));


元素


行地址


列地址


a[1][2]


a[1]


a[1]+2


*(a[1]+2)


*(a+1)


*(*(a+1)+2)


*(*(a+1)+2)

3.字符串指针

C语言中,有2种方式可以访问字符串1)通过字符数组访问2)指针访问

4.指针数组\

1)什么是指针数组:一个数组中所有的数据类型都是指针类型那么这就是指针数组

2)指针数组最大的好处是用来处理多字符串

因为我们的字符串本身就是用字符数组来储存的,如果涉及到多条字符串,就必须

用到二维字符数组。

定义一个指针数组

Char *p[]//这里我们定义一个指针数组;

Eg:char *p[3]={

"movie"

"movie1"

"movie2"}


m


o


v


i


e


\0


m


o


v


i


e


1


\0

5.void指针类型和NULL类型

定义指针以后必须进行初始化,不然很危险,因为它不知道该指向哪

如果不知道指到哪那就让它为空(NULL)

Eg:    int  *i;

I=NULL;

void指针类型

可以指向任何类型的c数据,也就是说可以用任何类型的指针变量给void类型赋值,但是当void类型指针要转成其他类型的时候,必须使用强制转换

Eg:  int i=10;

int *p,*m;

void *q;

p=&i;

q=p;

m=(int*)q;

printf("%d",*m);

6.多级指针(又叫指针的指针)

int i=10;

int *p=&i;

int **q=&p;

int ***r=&q;

printf("%d\n",***r);//输出i的值

printf("%d\n",**r);//输出p的值

printf("%d\n",*r);//输出q的值

时间: 2024-07-30 23:53:04

指针和数组的关系的相关文章

指针与数组的关系

指针与数组间关系紧密却一直没弄明晰,今天就来整理一下. ①定义中的内涵 当我们在定义数组时,必须要同时指定其类型和大小:而对于指针,则只需要指定其类型. 之所以数组需要指定大小,是因为系统会根据你所指定的大小为数组分配空间,例如int a[5],则数组得到sizeof(int)*5大小的存储空间(而且是连续的空间),不多不少. 而对于指针,系统只会为其分配空间,其指向地址并未分配,例如char *a,系统会为变量a分配空间,但*a(即a指向的地方)是随机的,系统不会为*a分配空间.这时候,你可以

c/c++(疑3) C语言指针与数组之间关系

c/c++ (疑1)数组和指针 c/c++(疑2) const extern 有了前面 两篇 基础,下面我们可以更深入的来介绍c/c++(疑3) C语言指针与数组之间关系 1 概述(C语言指针与数组之间关系) 指针就是指针,指针变量在32 位系统下,永远占4 个byte,其值为某一个内存的地址.指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到. 数组就是数组,其大小与元素的类型和个数有关.定义数组时必须指定其元素的类型和个数.数组可以存任何类型的数据,但不能存函数. 2    

C/C++指针和数组的关系

首先一个列子说明指针和数组真的不是一回事: 浅谈C中的指针和数组(一) 如果用硬是把数组和指针放在一个,一个放声明里一个放定义中,这里就能看到指针和数组名是不同的.这篇文章从符号表的角度分析一下指针和数组名的不同点,两种东西在数据访问的时候的不同点. 有关不同点,再来点更深层次的东西: 浅谈C中的指针和数组(二) 接下来看看指针和数组名的相同点,但是有两点特例.也即是sizeof和&操作的时候,他们表现的对象是不同的. 浅谈C中的指针和数组(三) C/C++指针和数组的关系

c/c++ 函数、常量、指针和数组的关系梳理

压力才有动力,15年中旬就要准备实习,学习复习学习复习学习复习学习复习……无限循环中,好记性不如烂笔头……从数组开始,为主干. c 的array由一系列的类型相同的元素构成,数组声明包括数组元素个数和类型,c 中的数组参数是引用形式传参(传址调用),而常量标量是按值传递. //[]方括号表示声明的是数组,里面的数字表明了数组包含的元素数目 int states[50];//声明50个整数的数组 double code[365];//声明365个浮点数的数组 char chr[20];//声明20

C指针和数组的关系详解

1.C中数组和指针的关系 对于任意类型的数组arr,对于同类型的指针类型parr(确切一点,可以假设类型为int,即int arr[], *parr).它们之间有如下"内幕": 1.数组的名称arr本身就是一个指针,这个指针指向数组的第一个元素 2.因为名称arr本身是指针,所以可以直接赋值给同类型的指针parr:parr = arr,这使得parr也指向数组的第一个元素,所以这个赋值过程等价于parr = &arr[0] 3.指针和数组名在效果上是等价的.它们的区别在于:指针

什么是指针?什么是数组?指针和数组的关系?

形象地讲,我们可以把计算机的内存看作一条长街上的一排房屋,每个房间都可以容纳数据并通过一个房号来表识.而表示每个房间房号的值我们可以称为地址.或许这样的比喻有局限性,毕竟真实地计算机内存是以数以万计的bit位组成. ⑴初始化: ①最简单的以 int *p 为例,初始化时内存里开辟了四个字节的空间. ▇▇▇▇ ②另一个声明 ,现在,我们有两个变量,下图中显示了后面那个未知内容的内存. char ch = 'a': char cp = &a; ▇→▇▓←(?) (cp)      (ch) ⑵&quo

C语言学习笔记--指针和数组的关系

1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译器自动分配一片连续的内存空间 ,而指针声明时只分配了用于容纳地址值的 4 字节空间 2.指针的运算 (1)指针是一种特殊的变量,与整数的运算规则为: p + n == (unsigned int)p + n * sizeof(*p); 当指针 p 指向一个同类型的数组的元素时,p+1 指向当前元素的

黑马程序员-C语言基础:指针类型与指针和数组、字符串的关系

//指针变量就是用来存储地址的,只能存储地址 格式:  int  *p;  这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的存储空间: int *p = &a;//这样一句可以写,此时的*只是一个标志,表示这个*只是表示p是个指针: *p = &a;//这样写就错了:此时*p表示取p指向的空间的值: 指针疑问:指针既然都占据8个字节,那么为什么要划分类型, 是因为当用*p指针取值或者赋值的时候,知道该取几个字节,比

指针与数组的区别和联系

转载: 一.指针与数组的联系: 指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用. 1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组.如: char str[20], *ptr; ptr=str; ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址.此时可以认为指针ptr就是数组str(反之不成立),这样