已有定义char k=2; char *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是( )。 A. *ptr1=*ptr2 B. *k=*ptr1*(*ptr2) C. *ptr2=k+2 D. k=*ptr1+*ptr2
时间: 2023-02-07 22:54:19 浏览: 117
A. *ptr1=*ptr2
B. *k=*ptr1*(*ptr2)
D. k=*ptr1 *ptr2
这三个赋值语句都不能正确执行。
A. 因为k是一个char类型的变量,ptr1和ptr2都是指向k的指针,而*ptr1和*ptr2都表示指针所指向的内存中的值。所以*ptr1=*ptr2是将两个指针所指向的值赋值给了彼此,这是不合法的。
B. 在C语言中,k是一个char类型的变量,不能对它进行解引用操作。所以*k=*ptr1*(*ptr2)是不合法的。
D. k=*ptr1 *ptr2这个赋值语句中,*ptr1 *ptr2的值会先被计算,然后再赋值给k。但是*ptr1 *ptr2这个表达式中,*ptr1和ptr2之间没有运算符,所以会产生语法错误。
相关问题
已有定义int k=2; int *ptr1, *ptr2; 且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是( )。
正确答案是:ptr1 = ptr2 + 1;
因为ptr1和ptr2都指向变量k,它们的值相同,但是指针变量ptr2加1后指向的是k的下一个内存地址,而ptr1指向的还是k,所以ptr1 = ptr2 + 1;这个赋值语句是错误的。
*ptr1 = *ptr1 + *ptr2; *ptr2 = *ptr1 - *ptr2; *ptr1 = *ptr1 - *ptr2什么意思
这是三行代码,用于交换两个指针所指向的变量的值,其步骤如下:
- `*ptr1 = *ptr1 * *ptr2;` 将 `ptr1` 所指向的值与 `ptr2` 所指向的值相乘,结果赋值给 `ptr1` 所指向的变量;
- `*ptr2 = *ptr1 - *ptr2;` 将 `ptr1` 所指向的值减去 `ptr2` 所指向的值,结果赋值给 `ptr2` 所指向的变量;
- `*ptr1 = *ptr1 - *ptr2;` 将 `ptr1` 所指向的值减去 `ptr2` 所指向的值,结果赋值给 `ptr1` 所指向的变量;
经过这三步操作,`ptr1` 和 `ptr2` 所指向的变量的值完成了交换。这种方法称为“异或法”,可以用于交换两个整数的值,也可以用于交换两个指针所指向的变量的值。