c语言,关于对数组名取地址

Python010

c语言,关于对数组名取地址,第1张

准确的说法,是变成了二级指针

而二级指针,是指向指针地址的指针,变相相当于一个第一维度只有1的二维数组。

其中的根源,在于C语言中,声明一个数组其实相当于申请了一个定长的指针(存储位置不同,使用上还是有区别的),你可以将数组名当做指针使用,而反过来,也可以将一个指针,以数组的方式合法访问其成员。而二维数组的声明后,A[1][3],之后A[0]是一个一维数组,同样A[0]保存的,也是这个一维数组的地址,A保存的是A[0]的地址,和二级指针相同。

找到变量在内存空间的位置,对变量进行操作时,会找到该处。

&后面是个变量。每个变量对应一块存储空间。每个存储空间有一个编号,也就是地址,&变量名  表示取出这个编,变量名表示取出这个编号所对应的存储空间里的值。

依照我的理解:& 取地址 就是找到那个分配的内存空间   然后去那块内存里  找我们需要的变量   我这可能是用了oc的解释   因为对c不是很熟悉。

&是取地址运算符,&a为变量a的地址。

系统就会在内存中分配一个空间,*a的值就是变量a的值3       定义一个指向整型数据的指针,作用与&相反,它是根据变量的地址取出变量的值在编译时就给它分配一个地址,该指针指向整型数据;&a就是2000,再把3写入这个空间。

int *p()&是取址运算符。又如scanf(&quot。。下面是定义和声明中用到指针的小结int *p。运行后p=2000就是把a的地址2000赋给p,作用是提取一个变量的地址。&就提取它的地址,由地址找到a在内存中的空间。*是指针运算符。

它由n个指向整型数据的指针元素组成,它指向一个指向整型数据的指针变量  p为指向含n个元素的一维数组的指针变量,那么在编译时%d"      p为返回一个指针的函数。

如果你想系统的了解建议你可以看看谭浩强的《c程序设计》(第三版)这本书通俗易懂,比如是2000,p=&a,该函数返回一个整型值。int **p。

假如先定义了一个整型指针变量p。是学习c语言不错的教材.g int a。

int (*p)()。而这个空间在内存中的位置就是它的地址,它会先根据&a知道a的地址。

int (*p)[n]。p是一个指针变量。int *p[n]定义指针数组p,&a)。比如你定义了一个变量当你输入3时   p为指向函数的指针。

对于一个数组来说,数组名是一个地址常量

并不是说是一个地址常量就没有地址(也就是存储常量的存储单元)

当程序没有被调入内存时候,是由三部分代码组成的,依次是二进制代码区(text segment),已经被初始化的静态或者全局变量区(data segment),没有被初始化的静态或者全局变量区(bss segment),常量都是存放在data segment区

当程序被调入内存之后,就在三部分的基础上又被分配了堆区和栈区,栈区用来存放临时变量,参数和返回值等临时的变量

就相当于我们定义char *a="12345",我们都知道这里的“a”是main()中定义的一个指向字符串“12345”的指针,那么“12345”是存放在哪里的呢,就是存放在data segment区的,而“a”变量本身确实存放在程序调入内存后被自动分配的栈区

强制转换的本质上是不改变存储单元中的01代码组合的,只是告诉编译器这个单元的数据将要被作为什么数据处理,例如一个指针变量占据4字节,一个int变量也是四个字节,我们就可以把int强制转换成指针的,需要的时候再把指针转换成int,输出int型结果时是不发生变化的

在这个题目中,“a”是一个数组名,也就是一个地址常量,这个常量存放在data segment区,“&a”取了“a”的地址,也就是一个指向“a”的指针,所以第三个语句是把指向“a”的指针进行了强制转换,第一个语句直接转换的“a”,第二个语句强制转换指向“a[0]”的指针