指针和数组进阶剖析

本文详细探讨了C语言中指针和数组的本质,包括指针的定义、运算及其与数组的关系。从传值调用与传址调用的区别,到常量与指针的用法,再到数组名的特性,最后分析了指针和数组在运算和相互转换中的行为。文章揭示了指针和数组在内存和地址操作上的深层联系。
摘要由CSDN通过智能技术生成

 

目录

一,指针本质分析

1,传值调用和传址调用:

2,常量与指针:

二,数组本质分析

1,数组名

2,数组参数

三,指针和数组本质分析

1,指针和数组的运算:

1-1,指针运算:

1-2,数组运算:

2,指针和数组之间的相互转换


一,指针本质分析

定义:指针就是内存地址;指针变量就是用来存放内存地址的变量。

分析:只要是变量就有地址和占用内存,所以指针变量也有地址,并且占用内存。

注意:指针是不占用内存地址的,其本质是地址,地址不占用空间。指针变量才占用内存空间。

指针变量内存所占空间大小sizeof(type*)或sizeof(p)取决于计算机的位数:

32位数占用4字节;

64位数占用8字节;

128位数占用16字节;

。。。

int i = 1;
int* p = &i;
p    //指针变量,是i的地址。
*p   //去内存地址中保存的值。
&p   //指针变量占用的地址,是p的地址。

&和*是一对相反操作符,可以相互抵消。*&p=p

%p  打印地址。

1,传值调用和传址调用

只有通过地址,才可以在函数内部修改函数外部的变量:

#include <stdio.h>
​
int swap(int* a, int* b)
{
    int c = *a;
    *a = *b;
    *b = c;
}
​
int main()
{
    swap(&aa, &bb);
    printf("aa = %d, bb = %d\n", aa, bb);
    
    return 0;
}

通过指针进行传址调用,交换了aa和bb的值。

2,常量与指针:

const int* p ;    //p可变,p指向的内容不能变。

int const* p ;    //p可变,p指向的内容不能变。

int* const p;    //p不可变,p指向的内容能变。

const int* const p ;   //p和p指向的内容均不能变。

口诀:左数又指(数:地址保存的数据;指:指向的地址)

const p :常量指针


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值