关于 c 语言的疑问

2018 年 11 月 30 日
 simple2025

文件名: test.c 代码

#include<stdio.h>
main(int argc, char const *argv[])
{
    char *s1, *s2;
    s1 = argv[0];
    s2=&argv[0];
    printf("s1:%s\n", s1);
    printf("s2:%s\n", s2);
    
    return 0;
}

输出结果

s1:/home/cqh/code/ccode/ch2/test
s2:����

为什么 s2 是乱码呢?按理将不是应该一样的吗?

3147 次点击
所在节点    Linux
10 条回复
heiher
2018 年 11 月 30 日
%p 打印看看就知道啦
zynlp
2018 年 11 月 30 日
你还是从头开始学吧
1a0ma0
2018 年 11 月 30 日
能一样嘛?一个是一个 pointer 一个是 pointer 的地址.....
leido
2018 年 11 月 30 日
s2 是指针数组的地址
Halry
2018 年 11 月 30 日
s2 是取了地址啊,肯定显示不出
kljsandjb
2018 年 11 月 30 日
char **s2;
leeZoom
2018 年 12 月 1 日
了解一下指针……
dongfang
2018 年 12 月 1 日
s1 和 s2 类型都不一样。
s1 是 char 指针,s2 是指向 char 指针的指针。
不要以为你一开始都定义为 char*,所以赋值之后 s1 和 s2 就一样了。
赋值有强制类型转换,s2 不是 char*类型,是 char**类型。
dongfang
2018 年 12 月 1 日
指针重新看一遍吧
liangzi
2018 年 12 月 1 日
&取地址符号 取得了数组的地址?猜测

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/513215

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX