已知:int i,j=7,*p=&i;,则与i=j;等价的语句是( ) A. *p=j; B. p=&j; C. i=**p; D. p=j;
时间: 2024-05-18 16:13:30 浏览: 81
与 `i=j;` 等价的语句是选项 B:`p = &j;`。
由于 `p` 是指向变量 `i` 的指针,所以 `*p` 表示变量 `i` 的值。因此,选项 A 中的语句 `*p=j;` 表示将变量 `i` 的值赋值为 `7`,而不是 `j` 的值 `7`。
选项 C 中的语句 `i=**p;` 表示将变量 `i` 的值赋值为指针变量 `p` 所指向的变量的值,但是此时指针 `p` 没有被初始化,其指向的地址是未知的,因此该语句是错误的。
选项 D 中的语句 `p=j;` 表示将指针变量 `p` 的值赋值为 `7`,而不是指向变量 `j` 的地址,因此也是错误的。
因此,选项 B 正确,能够将指针变量 `p` 的值赋值为变量 `j` 的地址,从而使得 `*p` 等价于变量 `j`,实现了 `i=j;` 的效果。
相关问题
已知:int i,j=7,*p=&i;,则与i=j;等价的语句是( ) A. i=**p; B. p=j; C. p=&j; D. *p=j;
正确的选项是 D. `*p=j;`,与 `i=j;` 等价。
首先,定义了整型变量 `i` 和 `j`,并将变量 `j` 的值初始化为 7。还定义了一个指向整型变量 `i` 的指针 `p`,并将其初始化为变量 `i` 的地址。
要将变量 `j` 的值赋给变量 `i`,可以使用赋值语句 `i=j;`。但是,这里需要找到一个与 `i` 等价的表达式,然后将变量 `j` 的值赋给这个表达式。
因为指针 `p` 指向变量 `i` 的地址,所以可以使用 `*p` 来表示变量 `i`。因此,可以使用赋值语句 `*p=j;` 将变量 `j` 的值赋给指针 `p` 所指向的内存地址,即变量 `i` 的值。这样,就实现了将变量 `j` 的值赋给变量 `i` 的效果。
因此,选项 D 正确。
已知有以下声明语句,struct company{int No;char Name[50];}comp,*ptr;ptr=&comp则以下对结构体变量comp中成员No的引用方式错误的是A.ptr->comp.No B.ptr->No C.comp.Ptr->No D.*ptr.No
根据已知的结构体声明语句`struct company{int No;char Name[50];}comp,*ptr;`,我们可以看出:
- `comp` 是一个 `struct company` 类型的结构体变量。
- `ptr` 是一个指向 `struct company` 类型的结构体变量的指针,它指向变量 `comp`。
因此,以下对结构体变量 `comp` 中成员 `No` 的引用方式错误的是选项 D. `*ptr.No`。
选项 A. `ptr->comp.No` 的引用方式是正确的,它等价于 `(*ptr).No`,表示通过指针 `ptr` 访问结构体变量 `comp` 的成员 `No`。
选项 B. `ptr->No` 的引用方式也是正确的,表示通过指针 `ptr` 直接访问结构体变量 `comp` 的成员 `No`。
选项 C. `comp.Ptr->No` 的引用方式是错误的,因为结构体变量 `comp` 并没有成员 `Ptr`,应该改为 `ptr->No`。
选项 D. `*ptr.No` 的引用方式是错误的,它等价于 `*(ptr.No)`,表示先访问指针 `ptr` 中的成员 `No`,然后再取其值的指针运算,这是错误的语法。应该改为 `(*ptr).No` 或 `ptr->No`。
阅读全文