文件名: 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 是乱码呢?按理将不是应该一样的吗?
1
heiher 2018-11-30 22:58:15 +08:00 via Android
%p 打印看看就知道啦
|
2
zynlp 2018-11-30 23:00:21 +08:00 via iPhone
你还是从头开始学吧
|
3
1a0ma0 2018-11-30 23:05:25 +08:00 via iPhone
能一样嘛?一个是一个 pointer 一个是 pointer 的地址.....
|
4
leido 2018-11-30 23:08:29 +08:00 via Android
s2 是指针数组的地址
|
5
Halry 2018-11-30 23:11:13 +08:00 via Android
s2 是取了地址啊,肯定显示不出
|
6
kljsandjb 2018-11-30 23:12:19 +08:00 via iPhone
char **s2;
|
7
leeZoom 2018-12-01 10:32:00 +08:00 via Android
了解一下指针……
|
8
dongfang 2018-12-01 17:45:32 +08:00
s1 和 s2 类型都不一样。
s1 是 char 指针,s2 是指向 char 指针的指针。 不要以为你一开始都定义为 char*,所以赋值之后 s1 和 s2 就一样了。 赋值有强制类型转换,s2 不是 char*类型,是 char**类型。 |
9
dongfang 2018-12-01 17:46:32 +08:00
指针重新看一遍吧
|
10
liangzi 2018-12-01 22:49:05 +08:00
&取地址符号 取得了数组的地址?猜测
|