C专家编程学习之第四章 数组和指针

    第四章 指针和数组
    声明和定义的最主要区别:声明并未非配内存, 定义一定分配了内存。
    1、当我们在文件1中,定义:
        int mango[100];

        在文件2中:声明:
        extern int *mango;
        这是不对的,当你声明为extern int *mango时,编译器理所当然认为mango是一个指针,在文件2中,我用sizeof(mango),结果为4.
        
        定义指针时,编译器并不为指针所指向的对象分配内存空间,它只分配指针本身的空间。除非在定义的同时赋给指针一个字符串常量进行初始化。例:
        char *p = "abcdefg";
        注意:只有对字符串常量才是如此。不能指望为浮点数之类的常量分配空间,如:
        float *pip = 3.14;        /*错误, 无法通过编译*/
        在ANSI C中,初始化指针时所创建的字符串常量被定义为只读的。如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。
        数组也可以用字符串常量来进行初始化, 如:
        char a[] = "abcdefg;
        与指针不同的是, 由字符串常量初始化的数组是可以修改的。

    
    对于数组char a[10];
    &a[0]和&a有何异同呢?
    很明显,&a[0]表示的是数组首元素的地址,即相当于a, 而&a则表示的是整个数组的首地址, 举个例子
    char a[10];    
    若数组a首元素地址为0xbfb1b022, 则
    &a = 0x0xbfb1b022
    &a + 1 = 0x0xbfb1b02c
    &a[0] = 0x0xbfb1b022
    &a[1] = 0x0xbfb1b023

    今天先看到这里,过几天再论一下数组和指针!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值