|
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和编译器都有关系)
**** 本内容被作者隐藏 ****
|