C语言随笔4:指针数组、数组指针

数组:

1:数组名为地址,表达方法:

Int A[10];

A;

&A;

&A[0];

数组名是指针常量

2:指针数组(每个元素都是指针

指针数组:double *a[10];

每个元素占4/8个字节;

3:数组指针:。int (*p2)[5];

指向数组的指针,在多维数组使用

p2指向 5个int的数组

p2+1:地址增加5个int变量的长度

指向二维数组的每行首地址.

注:(*p)的括号不可省略,[ ]的优先级高于*,若不加括号就是指针数组了。

初始化办法:int a[2][3];

int (*p)[3] = a;

a将首地址给过去,3定义偏移量

a[i][j]              //直接访问

==*(*(a+i)+j)  //取内容符,通过数组名访问

==p[i][j]

==*(*(p+i)+j)   //通过数组指针访问

a  二维数组

*(a+i) 等价于 a[i] //  直接访问成员

a[i] 表示第i行的所有数据 ,数据长度为3*4=12byte

*(a+i)+j  表示第i行第j个元素的地址

*(*(a+i)+j)  取内容访问该元素

博客:

*(a+1)单独使用时表示的是第 1 行数据,放在表达式中会被转换为第 1 行数据的首地址(有第0行)

编译器遇到这种情况都会转换为指向该行第 0 个元素的指针

*(*(a+1)+1)表示第 1 行第 1 个元素的值。很明显,增加一个 * 表示取地址上的数据。

原书:

因为;

*(a+i) 等价于 a[i] //取内容符:

二维数组的内容是一维数组

一维数组的名字是行的首地址

所以

*(*(a+i)+j)  等价于*(a[i]+j) //

a[i] 是第i行首地址

*(a[i]+j) 等价于(a[i])[j]

在取内容符中 j 对应一维数组

偏移量j个int

原文地址:https://www.cnblogs.com/yyyyloveu/p/12234919.html

时间: 2024-10-09 14:02:26

C语言随笔4:指针数组、数组指针的相关文章

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type

C编译器剖析_1.5 结合C语言来学汇编_指针、数组和结构体

让我们再来看一份C代码,及其经UCC编译器编译后产生的主要汇编代码,如图1.33所示,其中包含了数组.指针和结构体. 图1.33 数组.指针和结构体 按照C的语义,图1.33第9行的C代码是对局部数组number的初始化,需要把number[0]初始化为2015,而数组中的其他元素皆被初始化为0.UCC编译器采取的翻译方法是:先调用memset函数来把数组number所占的内存空间清0,然后再把number[0]设为2015,如图1.33的第17至24行所示.C库函数memset的API如下所示

C语言中的函数、数组与指针

1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成.这就是程序设计的基本分化方法: (1) 写一个函数的关键: 函数定义:函数的定义是这个函数的实现,函数定义中包含了函数体,函数体中的代码段决定了这个函数的功能: 函数声明:函数声明也称函数原型声明,函数的原型

C语言关于数组与指针内容小结

数组的基本概念 什么是数组:数组就是:数组是相同类型的元素的一个集合       类型说明符 数组名 [常量表达式]: 其中,类型说明符是任一种基本数据类型或构造数据类型.数组名是用户定义的数组标识符.方括号中的常量表达式表示数据元素的个数,也称为数组的长度.例如: int a[10]; /* 说明整型数组a,有10个元素 */ float b[10], c[20]; /* 说明实型数组b,有10个元素,实型数组c,有20个元素 */ char ch[20]; /* 说明字符数组ch,有20个元

程序设计基石与实践之C语言指针和数组基础

英文出处:Dennis Kubes:  <Basics of Pointers and Arrays in C>. 关于C语言中指针和数组的争论就像是一场恶战.一方面,有些人觉得,所有人都必须承认指针与数组是不同的.而另一些人则认为数组被当成指针来处理,因此它们不应该有什么区别.这种现象让人迷惑.然而,这两种说法其实都是正确的. 数组不是指针,指针也不能说是数组.在C语言中,指针仅在内存中代表一个地址,而数组是许多连续的内存块,多个类型相似的元素存储在其中.更深入的解释,请参考我之前的博文&l

C语言中的指针与数组的关联1

在C语言中,指针是一种类型,存放的是地址,例如char*p,这里p存放的是字符型数据的地址,int*p,p存放的是整形数据的地址,我们可以通过解运用*来获取该地址所指向的内容.而数组则是一种数据类型的集合,如int arr[]={1,2,3,4,5,6,7,8,9,10};这里声明与定义了一个整形数组,而char arr[]="hello world";则是声明与定义了一个字符类型的数组,这个数组内存放的是一个字符串. C语言规定,在大多数情况下数组名其实质就是数组元素的首地址,所以我

《C程序设计语言(第2版&#183;新版)》第5章 指针与数组

指针:保存变量地址的变量:在 C中应用广泛,因为1)指针往往是表达某个计算的唯一途径:2)使用指针往往可以写出更高效紧凑的代码:另一方面,1)指针和goto一样,会导致程序难以理解:2)粗心会很容易导致指针指向了错误的地方: 指针与数组关系密切: ANSI C明确制定了操纵指针的规则,并且使用void*代替char*作为通用指针的类型: 5.1 指针与地址 内存的组织:一系列连续编号或编址的存储单元,单元可以单个操纵也可以以连续成组的方式操纵:通常1个字节可以存放一个char,2个相邻字节可以存

C语言中数组与指针

数组是内存空间的一片连续的区域,用于存贮一组相同数据类型元素的集合. 指针变量中存放的是变量的地址,通过指针取得地址,再通过地址提取数据. 在大多是C语言书中,都有这样的说法,“数组和指针是相同的”.其实,数组与指针,只能在特定的情况下才是相同的,在大多书情况下,他们并不相同. C语言中每个表示变量的符号都代表一个地址,而每个变量的值就是该地址里所存储的内容. 定义一个字符数组 char a[]="asdfghjkl";现在来访问第i个字符a[i],编译器符号表中具有一个符号,它代表的

C语言之数组与指针(一)

---恢复内容开始--- 数组:内存连续的,同类型元素的集合: 从最基础的数组声明,数组初始化,数组赋值,数组遍历,到二维数组,再到指针数组,数组指针,以及数组和指针关系无疑都证明了数组在c语言中的重要地位:我们将一 一对其说明. 1.数组声明:float a[size] ; int b[size]; char c[size];(size是数组元素个数,必须为正整数 : #define  size 10   ) 这样我们就声明了一个数组:但是在下面代码中我们可以看出了一个问题:没有初始化的数组中