int *p;int a[2][2] = {1, 2, 3, 0}; p = a[0]; printf("%d, %d", *p, *(p+1)); 和int *p;int a[2][2] = {{1, 2},{ 3, 0}}; p= a[0]; printf("%d, %d", *p, *(p+1));运行结果有什么区别,为什么?
时间: 2024-04-16 13:25:40 浏览: 8
这两个代码片段的运行结果会有区别。
第一个代码片段中,二维数组a的初始化是逐行进行的,即第一行初始化为1和2,第二行初始化为3和0。然后将a[0]的地址赋给指针p,即p指向a的第一行。接着,通过*p和*(p+1)分别取得a[0][0]和a[0][1]的值,即1和2。因此,打印结果为"1, 2"。
而第二个代码片段中,二维数组a的初始化是整体初始化的,即第一行初始化为1和2,第二行初始化为3和0。然后将a[0]的地址赋给指针p,即p指向a的第一行。接着,通过*p和*(p+1)分别取得a[0][0]和a[0][1]的值,即1和2。因此,打印结果仍然为"1, 2"。
所以,这两个代码片段的运行结果是相同的。无论是逐行初始化还是整体初始化,最终都可以通过指针p访问到二维数组a的元素。
相关问题
int * p=null;int * a=*p;
这段代码存在指针错误。首先,`p`被初始化为`null`,也就是空指针,不能直接用来访问内存。其次,在第二行中,`*p`表示访问空指针所指向的内存,会导致程序崩溃。应该将指针`p`指向一个合法的内存地址,例如:
```c
int x = 10;
int *p = &x; // 将指针p指向变量x的地址
int *a = p; // 将指针a指向指针p所指向的内存
```
这样就可以将指针`p`指向一个合法的内存地址,并将其赋值给指针`a`。注意,指针`a`和指针`p`指向的是同一块内存,它们具有相同的值,但是类型为`int *`。
int a=0;int *p = a; 和 int *p = &a; 这里int *p=a;与int *p=&a;有什么区别?
在C++中,int a=0; 表示定义了一个整型变量a并将其初始化为0。
而 int *p = a; 表示将整型变量a的值赋值给一个指向整型数据的指针p。但是这是错误的,因为指针变量p需要存储一个地址,而不是一个整型值。因此,这个语句会编译失败。
相反,int *p = &a; 表示将整型变量a的地址赋值给一个指向整型数据的指针p。这是正确的用法,并且p指向的是整型变量a的地址。
因此,int *p = a; 和 int *p = &a; 语句之间的区别是,前者将整型值赋值给指针变量,而后者将整型变量的地址赋值给指针变量。