C语言,指针指针

本文深入探讨了数组与指针的关系,从一维数组开始,解析数组名、首地址和首元素地址的区别,并通过代码示例展示了指针如何指向数组。接着,介绍了二维数组与指针的交互,包括行地址和列元素的表示方式。最后,提到了字符串与指针的关联,虽然未展开详细讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

十一月二十二日记录。

数组与指针

  • 一维数组与指针

        当我们定义一个一维数组时,系统会在内存中为该数组分配一个储存空间,若再定义一个指针变量,并将该数组的首地址传给指针变量,则该指针就指向了这个一维数组。

int * p, a[10];

p = a;

        这里的a是数组名,也是数组的首地址。

int * p, a[10];

p = &a[0];

        效果与上面的一样。

        我们也可以把整个数组的地址赋给指针变量,当然此时该地址指向的是整个数组。

int * p,a[10];

p = &a;

        需要分辨清楚数组首地址、数组地址,数组首元素地址三个概念。

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int a[10] = { 0 };
	printf("sizeof(a) = %d\n", sizeof(a));		
    //打印a的长度
	printf("a : %d    &a : %d    &a[0] : %d", a, &a, &a[0]);
    //a的首地址、整个a的地址、a的首元素的地址
	printf("\n");
	printf("a+1 : %d    &a+1 : %d    &a[0]+1 : %d", a + 1, &a + 1, &a[0] + 1);
	//数组首地址+1则是下一个元素的地址,整个数组的地址+1则是整个数组后的第一个地址。
	printf("\n");
	return 0;
}

        结果如下:

  •  二维数组与指针

          二维数组与指针主体内容与一维数组大致相同,但是有些小区别。

  1. &a[0][0]既是二维数组的首地址,也是第0行0列元素的地址。&a[n][m]就是第n行m列元素的地址。
  2. a[0]+n表示第0行第n个元素的地址。
  3. &a[0]是第0行的首地址。&a[n]就是第n行的首地址。
  4. a+n表示第n行的首地址。
  5. Δ    *(*(a+n)+m)表示第n行第m列元素。
  6. Δ    *(a[n]+m)表示第n行第m列元素。
  7. 利用指针引用二维数组时要记住*(a+i)与a[i]是等价的。
  • 字符串与指针

        todo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值