猪猪虾 发表于 2020-9-7 16:43:09

printf那行,为什么string指针前面不加*,取值运算符


int main()
{
        char str;
        char *string = str;
        printf("请输入一个字符串:");
        fgets(str,100,stdin);   //读取输入的字符串
        // scanf("%s",str);   字符串
        printf("%s", string);    //读字符串
        return 0;

}

haoiyang 发表于 2020-9-7 17:16:22

因为输出字符串就是先取它的首地址,然后一直到/0;
比如你平时输出一个字符串,printf(“%s”,str),其实str的名字就是str的首地址(和数组差不多)

LuLD 发表于 2020-9-7 19:34:08

个人理解的意思是:

char str;
str 是一个一维数组,根据数组的特性 str 数组名指向的是它的第一个元素的首地址

char *string = str;
将str的首地址赋值给了指针变量 string,
而 %s是输出 一个字符串的,从 str的首地址开始直到'\0'(字符串是以\0 为结束符的)
所以string 只是给了printf 一个字符串的开头,然后 它自动往后搜索 结束符\0,
以上为个人理解,言语比较白话

405794672 发表于 2020-9-7 19:51:03

%s对应的是地址,它接受地址,不是值

风过无痕1989 发表于 2020-9-8 00:46:29

string是字符串的首地址,字符串是存储在一起的,以‘\0’结尾的,printf() 函数的控制符是 %s ,要求最后输出的是整个字符串,而不是单个字符;

* 在运算的时候,用在变量前是表示取这个变量所指向的地址的值,printf() 函数的控制符改为 %c ,string 改为 *string 输出的则是字符串的第一个字符。

猪猪虾 发表于 2020-9-22 19:37:12

haoiyang 发表于 2020-9-7 17:16
因为输出字符串就是先取它的首地址,然后一直到/0;
比如你平时输出一个字符串,printf(“%s”,str),其 ...

是只有字符串这样吗

猪猪虾 发表于 2020-9-22 19:56:56

风过无痕1989 发表于 2020-9-8 00:46
string是字符串的首地址,字符串是存储在一起的,以‘\0’结尾的,printf() 函数的控制符是 %s ,要求最后 ...

请受我一拜,大哥
页: [1]
查看完整版本: printf那行,为什么string指针前面不加*,取值运算符