我正在阅读的教科书解释说,指针是保存另一个变量起始地址的变量,并且它们是用一种指向的数据类型定义的。为什么你可以指定一个指针作为变量的地址呢?如果省略“&”而不是地址如果这是指针的定义方式,它是否应该始终保持地址?
答案 0 :(得分:0)
ptr
是实际的指针,而*ptr
是指向它的任何东西,所以*ptr=&var
没有任何意义,除非它是指向指针的指针。它是ptr=&var
或*ptr=var
如果你真的想为指针赋一个变量,可以使用强制转换。编译,但我看不出有任何理由这样做:
#include <stdio.h>
main()
{
int var=4;
int *ptr;
ptr = (int *)var;
printf("%d\n", *ptr);
}
行为未定义。当我运行它时,它会发生分裂。
答案 1 :(得分:0)
C很久以前就已经设计好了,一些设计选择是在不再流行的情况下进行的。在函数原型是可选的并且模糊性不能从上下文中解析时,需要操作符的地址来将对象的地址而不是其值传递给函数。为了保持一致性,使用相同的语法进行赋值。
但请注意,您建议的语法简化无法再区分这些情况:
▶ python so_question.py a
user_var_value is: alfa
还有其他潜在的语法简化:
对象和指针解除引用的@RestController
和@RequestMapping(value = "/selectUser", method = RequestMethod.GET, consumes = "application/json", produces="application/json")
public ResponseEntity<User> getTravelByUserId(@RequestParam("userId") Long theId) {
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
User userToReturn = new User();
return new ResponseEntity<User>(userToReturn, headers, HttpStatus.OK);
}
运算符可以合并为一个运算符。
间接函数调用的void *p;
void *q = &p; // make q point to the pointer p
void *q = p; // set q to the value of p
语法:.
是reduncdant,因为->
完全等效...(请注意,您也可以编写*
)