C: (pointer) 数组变量和指针的区别

来源:互联网 发布:win10精简优化教程 编辑:程序博客网 时间:2024/05/21 15:40

1. sizeof(数组)=数组的长度; sizeof(指向数组的指针)=指针大小4或8

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
                                                   
int main(int argc,const char * argv[])
{
                                                       
    chars[] = "hello world!";
    char*t = s;
                                                       
    printf("sizeof(s) is %li \n",sizeof(s));
    printf("sizeof(t) is %li \n",sizeof(t));
                                                       
    return0;
}

output:

sizeof(s) is 13

sizeof(t) is 8

 

2. char s[]中的&s等价于s, 同是取char s[]的地址;

而char *t = s中的&t 不等同于 t, 取得是t指针变量本身的地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
                                      
int main(int argc,const char * argv[])
{
                                          
    chars[] = "hello world!";
    char*t = s;
                                          
    // &s == s; What is the address of the s array?
    printf("&s is %p \n", &s);
    // &t != t; What is the address of the t variable?
    printf("&t is %p \n", &t);
                                          
    return0;
}

output:

&s is 0x7fff5fbffa2b

&t is 0x7fff5fbffa20

 

3. 声明指针, 内存会分配空间, 所以指针可以重新赋值; 而数组变量和数组元素公用地址, 所以如果重新赋值, 则产生编译错误.

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
                          
int main(int argc,const char * argv[])
{
                              
    chars[] = "hello world!";
    char*t = s;
                              
    s = t;// Error: Array type is not assignable
                              
    return0;
}
C编程 iOS开发
0 0