为什么C语言Scanf函数对字符串不要加 取地址运算符&

原文1:http://www.360doc.com/content/16/0515/11/19455598_559288667.shtml
原文2:https://zhidao.baidu.com/question/493101733.html
C语言的字符串实际上是 字符数组.既然是数组, 那么数组头自然是一个指针.char str[] = {“abc”};这个str实际上是一个不可变的字符指针.scanf的参数要求传入指针. 之后按照格式化字符串对指针指向的地址赋值…str本身就是一个指针了, 所以不需要&str,如果&str, 那么得到是就是指针的指针,scanf并不只是对字符串不加 取地址运算符.例如 int arr[] = {1, 2, 3};scanf("%d", arr);这里对arr照样不需要取地址运算符, 因为arr是数组头, 本身就是一个指针.上面的语句是对arr数组的第一个元素赋值, 就是arr[0];当然也可以这么写.scanf("%d", &arr[0]);arr[0]是一个值, 并非指针, 于是对其取地址.对于字符串也可以这么写.
char str[3] ;scanf("%c", &str[0]);这是对str的第一个元素赋值也就是 str[0];

在这里插入图片描述
在这里插入图片描述

posted @ 2019-03-07 15:02  超级小白龙  阅读(1586)  评论(0编辑  收藏  举报