以下两种语句是否等价: 1. int stu [4]; int (*p)[4] = stu; 2. int stu [4]; int *p = stu;
时间: 2024-06-14 12:06:30 浏览: 122
以下两种语句是不等价的:
1.
```c
int stu[4];
int (*p)[4] = stu;
```
这里定义了一个名为`stu`的整型数组,数组长度为4。然后定义了一个指向整型数组的指针`p`,并将其指向`stu`数组。
2.
```c
int stu[4];
int *p = stu;
```
这里同样定义了一个名为`stu`的整型数组,数组长度为4。然后定义了一个指向整型的指针`p`,并将其指向`stu`数组的第一个元素。
这两种语句的区别在于指针的类型不同。第一种语句中,指针`p`是一个指向整型数组的指针,第二种语句中,指针`p`是一个指向整型的指针。因此,这两种语句的含义和用法是不同的。
相关问题
合法的c语言赋值语句
在C语言中,赋值语句用于将右侧的表达式的值存储到左侧的变量中。合法的C语言赋值语句有多种形式,以下是常见的几种:
1. **简单赋值**:
```c
int a = 5; // 将整数5赋给变量a
char c = 'A'; // 字符'A'赋给字符变量c
float f = 3.14f; // 浮点数3.14赋给浮点变量f
```
2. **复合赋值运算符(+=, -=, *=, /=, %=等)**:
```c
int x = 10;
x += 5; // 等价于 x = x + 5,x现在变为15
```
3. **指针赋值**:
```c
int *p = &a; // p指向变量a的地址
*p = 100; // 通过指针修改变量a的值
```
4. **数组元素赋值**:
```c
int arr[5] = {0}; // 初始化数组
arr[0] = 1; // 设置第一个元素的值
```
5. **结构体或联合成员赋值**:
```c
struct person {
char name[20];
int age;
};
person stu; // 定义一个person结构体
stu.age = 20; // 赋值给age成员
```
注意,赋值操作符的两侧都必须是可以明确转换的数据类型,否则编译器可能会报错。同时,在使用复合赋值时要注意数据类型的一致性。
阅读全文