C语言高级编程:指针和数组

1. 说明:

1)变量p本身的地址在编译时确定,它是不变的;变量p存的内容是一个地址,在运行时才能确定,它是变化的

2)数组arr的地址在编译时确定,它是不变的;数组arr村的内容是一个数据

3)指针变量p能以数组的方式访问;数组arr能以指针的形式访问

1.1 代码:

#include <stdio.h>


int main(void)
{
    int i = 10;
    int *p = &i;
    int arr[5];

    p[0] = 1;
    *(arr+0) = 2;

    printf("&i = %p\n", &i);
    printf("p = %p, &p = %p\n", p, &p);
    printf("arr = %p, &arr = %p\n", arr, &arr);
    printf("p[0] = %d, *(arr+0) = %d\n", p[0], *(arr+0));

    return 0;
}

1.2 结果:

baoli@ubuntu:~/c$ ./a.out
&i = 0x7ffe9c0feb04
p = 0x7ffe9c0feb04, &p = 0x7ffe9c0feb08
arr = 0x7ffe9c0feb10, &arr = 0x7ffe9c0feb10
p[0] = 1, *(arr+0) = 2

2. 说明:

1)定义为数组时,不能声明为指针

2)定义为指针时,不能声明为数组

2.1 代码:

#include <stdio.h>

int array[5];
extern int *array;

int *p;
extern int p[];

int main(void)
{
    return 0;
}

2.2 编译:

baoli@ubuntu:~/c$ gcc test.c -g
test.c:4:13: error: conflicting types for ‘array’
extern int *array;
             ^
test.c:3:5: note: previous declaration of ‘array’ was here
int array[5];
     ^
test.c:7:12: error: conflicting types for ‘p’
extern int p[];
            ^
test.c:6:6: note: previous declaration of ‘p’ was here
int *p;
      ^
发布了170 篇原创文章 · 获赞 116 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/u012247418/article/details/102886698