关于 c 语言的疑问

2018-11-30 22:48:01 +08:00
 chenqh

文件名: 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 是乱码呢?按理将不是应该一样的吗?

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

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

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

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

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

© 2021 V2EX