C语言基础:指针与内存理解

需积分: 9 1 下载量 76 浏览量 更新于2024-09-08 收藏 5KB TXT 举报
本资源是一份关于C语言基础的课程讲解,主要内容包括变量内存地址、指针概念、空指针、数据类型转换、常量指针、数组与指针的关系以及函数的使用。 1. **变量和内存地址**: 在C语言中,声明变量`int a = 10;`时,系统会为其分配内存空间,并且内存地址通常用十六进制表示,如`0x123`。`int *p;`定义了一个指针变量,用来存储其他变量的内存地址。通过`p = &a;`,指针`p`被赋值为变量`a`的地址,即`p`的值为`0x123`。 2. **指针操作**: `*p`是解引用操作,它表示取指针`p`所指向内存中的值,也就是变量`a`的值,即`10`。`NULL`在C语言中是一个预定义的宏,其值为`0`,用于表示空指针。通过`p = NULL;`,将`p`设置为空指针,表示它不指向任何有效的内存地址。 3. **数据类型转换**: 将不同类型的数据进行赋值或转换需要注意类型兼容性。例如,`int i = f;`时,由于`f`是浮点型,会被隐式转换成整型,因此`i`的值为整数`3`。但尝试对指针`p`进行相同操作,由于`f`不是`int`类型,会导致错误。 4. **常量指针**: `const int *p;`声明了一个只读的指针,这意味着它不能修改所指向的内存值。试图修改这样的指针会编译错误。 5. **数组和指针关系**: 使用数组名作为指针,如`int array[10];`,数组名本身就是指向数组首元素的指针。通过`p = &array;`可以获取数组的地址,而`p[0]`和`*(p + 5)`则是访问数组元素的方式。 6. **动态内存分配和指针移动**: `int *p = int *100;`表明动态分配了足够存放100个`int`类型的内存空间。通过`p += 2;`,指针向后移动了两个`int`的大小,即`32`个字节。 7. **多级指针和数组嵌套**: 高级指针如`int*** p2;`和`***p2`分别表示指向指针和指针指向的内存地址。通过`p2 = int***&p;`,`***p2`指向的是`a`的地址。 8. **函数调用与参数交换**: `swap`函数用于交换两个整数的值,通过传递指针间接实现了数据的交换,这是一种常见的函数参数传递方式。 在`main()`函数中,这些概念被用于演示C语言的基本操作,包括变量声明、指针赋值、内存操作以及函数调用。这份资料提供了一个深入理解C语言基础的好例子。