技术解析

关于 c 语言的疑问
0
2021-06-22 11:47:03
idczone

文件名: test.c 代码

#include
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 是乱码呢?按理将不是应该一样的吗?


%p 打印看看就知道啦

你还是从头开始学吧

能一样嘛?一个是一个 pointer 一个是 pointer 的地址.....

s2 是指针数组的地址

s2 是取了地址啊,肯定显示不出

char **s2;

了解一下指针……

s1 和 s2 类型都不一样。
s1 是 char 指针,s2 是指向 char 指针的指针。
不要以为你一开始都定义为 char*,所以赋值之后 s1 和 s2 就一样了。
赋值有强制类型转换,s2 不是 char*类型,是 char**类型。

指针重新看一遍吧

&取地址符号 取得了数组的地址?猜测

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服