指针学习。

本文详细介绍了内存的四个区域:代码区、全局区、栈区和堆区,以及地址的概念。接着,深入探讨了指针变量的定义、赋值和引用,包括一维数组和二维数组与指针的关系。通过实例解析了如何通过指针访问数组元素,并展示了如何在不同情况下正确使用指针。最后,讲解了如何通过指针访问二维数组的元素及其内存布局。
摘要由CSDN通过智能技术生成

目录

内存四区。

地址

首地址

指针变量

指针变量的定义:

指针变量的赋值:

指针变量的引用:

一维数组与指针

二维数组与指针

求m行n列元素


内存四区。

a) 代码区。代码。。 b)全局区。全局的常量字符串常量“abc" 变量 c)栈区。系统自动开辟,系统自动释放。并不是很大。 d)堆区。动态开辟的内存,手动开辟,手动释放。大。

地址

地址: 把内存以单个字节为单位,分开。对每一-个字节编号,这个编号就是地址。 a)编号是连续的。 b) 唯一的。 c) 取地址运算符: &单目运算符优先级"()" "[]" "." 结合性右往左。 int a; //a 一个内存。 &a; s

首地址

首地址:一段内存空间中第--个存储单元的地址。存储单元。

指针变量

指针变量: 1.用来存放地址的变量。2.内存大小4B。 地址是一些编号,一种数据。 整数:int a; 字符:char c;。 小数:float b; 地址:指针变量。

指针变量的定义:

数据类型*变量名;

int *p;         //定义一个指针变量p。存的是地址! !。
                //int指明指针指向的数据类型。
                //*指明p这个变量是一个指针变量.
​
char *p1        //p1保存一个字符型变量的地址
float *p2       //p2保存一个单精度浮点型变量的地址

指针变量的赋值:

p=&a;          //p指向a

指针变量的引用:

访问a这个int变量:
1.使用变量名:
2.指针访问: *指针变量。
注意了:"*"为取值运算符,返回某一个地址中的值。
      在定义指针变量的时候int *p; *只是表明p是一个指针变量。。
      非定义,*p;取值p指向的内存值。。
printf("%d",*p);

一维数组与指针

定义一个一维数组,数组名是这个数组的首地址

首地址:一段内存空间中第--个存储单元的地址。存储单元。

对于 int a[5];

a指向a[0];a[0]是int类型的元素,a就是int*类型

&a这个地址指向整个数组int(*)[5];

int a[5];
    printf("a=%d\n",a);
    printf("&a=%d\n",&a);
     printf("a+1=%d\n",a+1);
    printf("&a+1=%d\n",&a+1);
//运行结果
/*
a=6356716 
&a=6356716
a+1=6356720
&a+1=6356736
*/
int a[5]={1,2,3,4,5};
    int *p=a;
    int i;
    for(i=0;i<5;i++){
         printf("%d\n",*p++);       //p会变
         printf("%d\n",*(p+i));     //p不会变
         printf("%d\n",*(a+i));     //不能用*(a++);因为a是数组名  
    }

二维数组与指针

对于一个二维数组a[3][4]

a是指向a[0]这个- -维数组。a的类型是什么? int(*)[4];          a+1           16B。
a[0]指向a[0][0]这个元素; a[0] 的类型是什么?   int*           a[0]+1                4B.
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    int *p=a;
    int i,j;
    for(i=0;i<3;i++){
            for(j=0;j<4;j++){
            int *q=p++;
         printf("%d\n",*q++);
    }}
​

求m行n列元素

a[m][n];
*(a[m]+n)
*(*(a+m)+n)
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    printf("%d\n",a[2][2]);
    printf("%d\n",*(a[2]+2));
    printf("%d\n",*(*(a+2)+2));
//运行结果
    /*11
    11
    11*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值