C语言—指针与数组

C语言—指针与数组
#include <stdio.h>
//所以可以使用指针代替数组类型作为函数参数
void printArray(int *array,int length)
{
    for (int i = 0; i < length; i++) {
        printf("%d ",array[i]);
    }
    printf("\n");
}
   


int main(int argc, const char * argv[])
{
    //当数组作为函数参数传递的时候会自动转换指针类型,这样就造成数组信息遗失,我们没有办法在函数中取得数组的长度信息,所以需要外界传入一个数组长度
    int nums[] = {6,8,9,10};
    int len = sizeof(nums) / sizeof(int);
    printArray(nums,len);
    
    
    return 0;
}


void test1()
{
    //数组名不是一个指针
    int nums[] = {1,2,3,4,5};
    
    int *p = nums;
    //第一个不同点
    //   sizeof 计算变量所在存储空间的字节数
    int numsLength = sizeof(nums);
    printf("%d\n",numsLength);
    //指针变量占8个字节存储空间
    printf("%lu\n",sizeof(p));
    //sizeof(nums) != sizeof(p)
    //当一个数组赋值给一个指针变量,有些信息就丢失了,这个称为信息遗失,比如数组长度
    
    //第二个不同点
    // nums = &nums 数组名的地址就是数组的地址
    printf("%p\n",nums);
    printf("%p\n",&nums);
    // p ! = &p  指针中存放地址与指针本身地址不同
    printf("%p\n",p);
    printf("%p\n",&p);
    //第三个不同点
    //数组名是不占用存储空间,当程序编译的时候所有出现数组名的地方都会被替换为数组的地址,所以不可以改变数组名的指向
    //指针变量的指向是可以改变的
    int num1s[] = {7,9};
    //    nums = num1s;
    p = num1s;
    printf("%d\n",p[1]);
    
}




void test()
{
    int nums[] = {1,2,3,4,5};
    //数组名像一个指针
    //    printf("%d\n",*nums);
    //    printf("%d\n",*(nums+1));
    //    printf("%d\n",*(nums+3));
    //
    //    printf("%p\n",&nums[0]);
    //    printf("%p\n",&nums[1]);
    //    printf("%p\n",&nums[2]);
    //    printf("%p\n",&nums[3]);
    //    printf("%p\n",&nums[4]);
    
    int *p = nums;
    
    printf("%d\n",*(p+2));
    printf("%d\n",p[2]);
    
    // printf("%d\n",2[p]); 开发中不要这写
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值