| 
 | 
 
10鱼币 
 本帖最后由 竟无语凝噎 于 2019-1-16 15:11 编辑  
 
#include<stdio.h> 
#include<string.h> 
#include <iostream> 
 
 
int main() 
{ 
    char *str1 = "http://see.xidian.edu.cn/"; 
    char str2[100] = "http://see.xidian.edu.cn/"; 
    char str3[6] = "12345"; 
    printf("strlen(str1)=%d, sizeof(str1)=%d\n", strlen(str1), sizeof(str1)); 
    printf("strlen(str2)=%d, sizeof(str2)=%d\n", strlen(str2), sizeof(str2)); 
    printf("strlen(str3)=%d, sizeof(str3)=%d\n", strlen(str3), sizeof(str3)); 
    return 0; 
} 
//运行结果: 
//strlen(str1)=25, sizeof(str1)=8 
//strlen(str1)=25, sizeof(str1)=100 
//strlen(str1)=5, sizeof(str1)=6 
 
 
问题: char *str1 = "http://see.xidian.edu.cn/"; 这个该如何理解? 
 本帖最后由 行客 于 2019-1-18 08:26 编辑 
问题1: 为什么int *str1不可以 而 char* str2 却可以? 
回复: 
str2 = "adadadad";中的双引号,我们可以理解做了三件事: 
1、申请了空间(在常量区),存放了字符串 
2、在字符串尾加上了'\0' 
3、将该字符串的首地址赋值给指针str2(汇编为:mov dword ptr [ebp-8],offset string "adadadad" (0046e01c) 注意:0046e01c这个地址不是每个编译器的结果都一样的,和PC和编译器都有关系)
  
 
 
 |   
 
 
最佳答案
查看完整内容 
问题1: 为什么int *str1不可以 而 char* str2 却可以?
回复:
str2 = "adadadad";中的双引号,我们可以理解做了三件事:
1、申请了空间(在常量区),存放了字符串
2、在字符串尾加上了'\0'
3、将该字符串的首地址赋值给指针str2(汇编为:mov dword ptr [ebp-8],offset string "adadadad" (0046e01c) 注意:0046e01c这个地址不是每个编译器的结果都一样的,和PC和编译器都有关系)
**** 本内容被作者隐藏 **** 
 
 
 
 
 
 
 |