c语言 数组 指针

基础知识:

数组名:相当于指针,即数组作为实际参数时,不是传值给形式参数,而是把实际参数数组的起始地址传递给形式参数数组,这样两个数组就共用一段内存,不需要建立两个  即浪费空间。

指针 :int *pointer = a; *pointer 表示变量a本身,pointer表示变量a在内存的地址。

程序:

int a,b;

int *p1,*p2;

scanf("%d,%d",&a,&b);//格式化输入a,b的值

p1 = &a;//&为地址运算符

p2 = &b;//把指针变量(p1,p2)的值 指向变量(a,b)的地址。

printf("%d,%d",*p1,*p2);

PS:

temp_p = p1;//地址内存

temp = *p1;//实际上的值

多维数组:(首先,把多维数组当作多个一维数组)(表面上与一维有冲突)

例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};//定义一个3行4列的二维数组

数组中a+0表示第0行的首地址;数组中a+1表示第1行的首地址;*a表示*a(a+0);第一个元素其实就是a[0][0]

*(a+0)显然表示的不是物理位置,也就不可能得到第一个元素的值了,他仅仅是一个内存地址,也就是第0行的起始地址。

*(*(a+0)+0)表示第0行第0列个元素的值,就是a[0][0];

总结:

1,a与*a表示这个数组的地址;

2,a[0]与*(a+0)表示这个数组的0行首地址

3,&a[0],&a[0][0]分别表示0行的首地址,0行0列的元素的地址。值或是地址  作取地址运算都是地址。

4,a[0][0]与*(*(a+0)+0)表示第一个元素。

5,a[1]与(a+1)表示1行的首地址。

6,*(*(a+0)+0)与*((a+0)+0)不同。

对于2维数组而言,a[0]表示地址。

对于数组,a[0][0],表示的意思为a[0]表示地址,[0]表示第一位,和在一起表示值。

而对于a[0],a表示地址,[0]表示位,和在一起表示值。

"*"操作,必须精确到元素的时候,才能得到他得值,否则为地址值。是物理地址不是“内存地址”。

把2维数组作为一维看得时候,*(a[1])=5是正确的,类似于b[2]={33,4};,*b=33;即对于一维数组,*b默认表示第一个值。

因为*(a[1]) = *(*(a+1)+0);所以a[1]=*(a+1)+0

 b+1表示将b数组的起始位置向后进一位,移动到第二个元素的地址上,也就是b[0]到b[1]的过程。

数组名称代表的是数组的第一个元素的内存地址,与指针相似!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,数组名可以看作是一个指向数组首元素的指针。因此,可以通过数组名来访问数组中的元素。同时,也可以使用指针来访问数组中的元素。这种指向数组指针被称为数组指针。 定义数组指针的一般形式为: ``` 数据类型 (*指针变量名)[元素个数]; ``` 其中,指针变量名是你定义的数组指针变量名,数据类型是数组中元素的数据类型,元素个数是数组中元素的个数。 例如,定义一个指向int类型,元素个数为5的数组指针变量可以这样写: ``` int (*p)[5]; ``` 使用数组指针变量访问数组元素时,需要使用指针运算符*来解引用指针,然后再使用下标运算符[]来访问元素。例如,访问第3个元素可以这样写: ``` *(p+2); ``` 这里的p+2表示将p指向的地址加上2个int类型数据大小,得到的新地址即为第3个元素的地址。然后使用解引用符号*来获取该地址对应的元素值。 还可以使用指针数组来表示数组指针指针数组就是一个数组,其每个元素都是一个指针。例如,定义一个指向int类型,元素个数为5的指针数组可以这样写: ``` int *p[5]; ``` 使用指针数组来访问数组元素时,可以直接使用下标运算符[]来访问元素。例如,访问第3个元素可以这样写: ``` p[2]; ``` 这里的p[2]表示指针数组中第3个元素的地址,可以直接使用该地址来访问元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值