EP9指针:传址与传值,指针与数组,一维数组传参(c语言学习笔记)

1. 重新认识数组

有关数组名的理解

一般来讲,数组名代表首元素地址,但是有下列两个情况除外

• sizeof(数组名),sizeof中单独放数组名,这里的数组名表示整个数组,计算的是整个数组的大小, 单位是字节

• &数组名,这里的数组名表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素 的地址是有区别的)

因为数组名一般是首元素地址,而指针也是地址,所以可以得出结论数组名就是一个指针

2. 指针与数组的关系

因为指针等于数组名

所以可以这么认为

int arr[i];<==>*(arr+i)

3. 传值与传址

3.1 传值

int add(int m, int n)
{
    return m + n;
}
int main()
{
    int x = 0;
    int y = 0;
    scanf("%d %d", &x, &y);
    int ret=add(x, y);
    printf("%d", ret);
    return 0;

3.2 传址

void Swap2(int* pa, int* pb)//使用指针变量作为形参接受a,b的地址
{
    int z = 0;
    z = *pa;   //*pa,*pb都是一个数字罢了
    *pa = *pb; 
    *pb = z;   
}

int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    

    printf("交换前:a=%d b=%d\n", a, b);
 
    Swap2(&a, &b); //从这里开始传a和b的地址

    printf("交换后:a=%d b=%d\n", a, b);
    
    return 0;
}

4. 一维数组传参的本质 

结论:本质上数组传参本质上传递的是数组首元素的地址。

void test(int arr[])//1.参数写成数组形式,本质上还是指针
{
    printf("%d\n", sizeof(arr));
}

=====================================================================
void test(int* arr)//2.参数写成指针形式
{
    printf("%d\n", sizeof(arr));
}


int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    test(arr);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值