C语言指针赋值语句:正确与错误解析
题目: 以下哪项是正确的指针赋值语句?
int *p1, *p2, m = 5, n;
选项:
(A) p1 = &m; p2 = &p1;
(B) p1 = &m; p2 = &n; *p1 = *p2;
(C) p1 = &m; p2 = p1;
(D) p1 = &m; *p1 = *p2;
正确答案: A 和 C
解析:
A选项: p1 = &m; p2 = &p1;
p1 = &m;将变量m的地址赋值给指针p1,此时p1指向m。p2 = &p1;将指针p1的地址赋值给指针p2,此时p2也指向m。
C选项: p1 = &m; p2 = p1;
p1 = &m;将变量m的地址赋值给指针p1,此时p1指向m。p2 = p1;将指针p1所指向的地址赋值给指针p2,此时p2也指向m。
B选项: p1 = &m; p2 = &n; *p1 = *p2;
p1 = &m;将变量m的地址赋值给指针p1,此时p1指向m。p2 = &n;将变量n的地址赋值给指针p2,此时p2指向n。*p1 = *p2;将p2所指向地址的值(即n的值)赋值给p1所指向的地址(即m的值)。这会导致变量m的值被修改为n的值,不符合题目要求。
D选项: p1 = &m; *p1 = *p2;
p1 = &m;将变量m的地址赋值给指针p1,此时p1指向m。*p2没有被赋值,p1不能通过*p2获取值,不符合题目要求。
总结:
在指针赋值语句中,要注意区分直接赋值和间接赋值,以及指针和地址的概念。A 和 C 选项都是正确的赋值语句,因为它们正确地将指针指向了变量的地址。而 B 和 D 选项则包含了错误的赋值操作,导致了不符合题目要求的结果。
原文地址: https://www.cveoy.top/t/topic/n03S 著作权归作者所有。请勿转载和采集!