有定义float a[10],*p=NULL,p=a,p,p++,p=&a[3],p,p-3,p+3,p--表示什么
时间: 2024-01-27 19:02:44 浏览: 36
这段代码有一些语法错误,应该是:
```c
float a[10], *p = NULL;
p = a;
```
这段代码定义了一个包含10个元素的浮点型数组a,以及一个指向浮点型变量的指针变量p,并将其初始化为NULL。然后将数组a的第一个元素的地址赋值给指针p,即p指向数组a的第一个元素。
- `p`:表示指向数组a第一个元素的指针p的值。
- `p++`:表示将指针p向后移动一个位置,即指向数组a的第二个元素的地址。
- `p=&a[3]`:表示将指针p指向数组a的第四个元素的地址。
- `p`:表示指针p指向数组a的第四个元素的地址。
- `p-3`:表示将指针p向前移动3个位置,即指向数组a的第一个元素的地址。
- `p+3`:表示将指针p向后移动3个位置,即指向数组a的第七个元素的地址。
- `p--`:表示将指针p向前移动一个位置,即指向数组a的第六个元素的地址。
需要注意的是,当指针p指向数组a的第四个元素的地址时,可以通过指针p访问数组a的后面的元素,但是不能访问数组a的前面的元素,因为数组a是定义为包含10个元素的数组,而不是包含4个元素的数组。如果访问了数组a的越界元素,就会产生未定义的行为,可能会导致程序崩溃或产生奇怪的结果。
相关问题
有定义float a[10],*p=NULL,p=a表示什么
这段代码有一些语法错误,应该是:
```c
float a[10], *p = NULL;
p = a;
```
这段代码定义了一个包含10个元素的浮点型数组a,以及一个指向浮点型变量的指针变量p,并将其初始化为NULL。然后将数组a的第一个元素的地址赋值给指针p,即p指向数组a的第一个元素。这样做的效果是,可以通过指针p访问数组a的元素,例如:
```c
p[0] = 1.0;
p[1] = 2.0;
```
等价于:
```c
a[0] = 1.0;
a[1] = 2.0;
```
指针p也可以用来遍历整个数组,例如:
```c
int i;
for (i = 0; i < 10; i++) {
p[i] = i * 1.0;
}
```
等价于:
```c
int i;
for (i = 0; i < 10; i++) {
a[i] = i * 1.0;
}
```
int main() { int** way = NULL; float* D = NULL; int s=0, e=0, p=0; int n = 1; int* c; c = new int[10]; string start, end; //读取 city 表 City* cities = NULL; Cities(cities); //读取 route 表 Route* route = NULL; Routes(route); //建立邻接矩阵 Graph graph; CreatGraph(graph, cities, route);
这段代码是用 C++ 实现的,主要包括以下内容:
1. 定义了一个指向指针的指针 way,和一个指向 float 类型的指针 D,以及 s、e、p 三个整型变量和一个整型变量 n。
2. 动态分配了一个长度为 10 的整型数组 c。
3. 定义了两个字符串类型的变量 start 和 end。
4. 调用 Cities 函数和 Routes 函数分别从 city 表和 route 表中读取数据,并将数据存储在 cities 和 route 指针变量中。
5. 调用 CreatGraph 函数建立邻接矩阵,该函数接受三个参数,第一个参数是一个 Graph 类型的变量,第二个参数是一个 City 类型的指针,第三个参数是一个 Route 类型的指针。
阅读全文