dysow 发表于 2021-4-8 14:42:09

网上题库的题,这题对么?

有以下程序执行后输出的结果是
main()
{
   char str[]={"China","Beijing"},*p=str;
   printf("%s\n",p+10);
}


答案是Beijing

但实际运行的时候*p=str;这句话报错的应该是(*p)=str吧

yuxijian2020 发表于 2021-4-8 14:52:40

你可能没有太理解字符串,这里没有错误,不会报错
//这里定义了一个字符串数组str
//str大小为2    str内每个字符串大小为10(或者说字符数组大小为10)
char str[]={"China","Beijing"}
//这里定义了一个指针指向str中的第一个字符串的首地址
char *p = str
//p+10就是指针向后移动10个char,此时p指向了str中的第二个字符串的首地址
//打印结果为Beijing
printf("%s\n",p+10);

dysow 发表于 2021-4-8 15:00:14

yuxijian2020 发表于 2021-4-8 14:52
你可能没有太理解字符串,这里没有错误,不会报错

21        11        F:\c c++\内存实验\题库.cpp        cannot convert 'char (*)' to 'char*' in initialization

我复制你代码,就报错了,是指针类型不匹配吧

yuxijian2020 发表于 2021-4-8 15:04:44

dysow 发表于 2021-4-8 15:00
21        11        F:\c c++\内存实验\题库.cpp        cannot convert 'char (*)' to 'char*' in initializatio ...

你用的什么编译器

dysow 发表于 2021-4-8 15:06:46

yuxijian2020 发表于 2021-4-8 15:04
你用的什么编译器

dev c++

yuxijian2020 发表于 2021-4-8 15:14:39

int main()
{
    char str[]={"China","Beijing"},*p = (char*)str;
    printf("%s\n",p+10);

    return 0;
}
拿去,强转一下就行了
我刚那gcc测试过了

yuxijian2020 发表于 2021-4-8 15:16:57

因为str定义的时候限定了字符串数组的大小为10
但是char*没有保存字符串数组的大小
但是printf函数会自动找到字符串截止符

dysow 发表于 2021-4-8 15:40:49

yuxijian2020 发表于 2021-4-8 15:14
拿去,强转一下就行了
我刚那gcc测试过了

*p = (char*)str是不是等同于*p=&str

yuxijian2020 发表于 2021-4-8 15:58:36

不   是强制把str变成char *
相当于 char *p = str;
页: [1]
查看完整版本: 网上题库的题,这题对么?