C的初级问题
#include <stdio.h>#define MSG "kkkkk"
#include <string.h>
int main()
{
char ar[] = MSG;
const char * pt = MSG;
return 0;
}
为什么打印ar和打印pt两者不一样,书上就提了一句,没细讲 没看到哪里有不同啊
#include <stdio.h>
#define MSG "kkkkk"
#include <string.h>
int main()
{
char ar[] = MSG;
const char * pt = MSG;
printf("AR=%s........PT=%s\n",ar,pt);
printf("AR_len=%d........PT_len=%d\n",strlen(ar),strlen(pt));
return 0;
}
/*
PS D:\wp> ./ct9
AR=kkkkk........PT=kkkkk
AR_len=5........PT_len=5
PS D:\wp>
*/ wp231957 发表于 2022-7-7 11:20
没看到哪里有不同啊
不是的朋友打印%P你试试,然后我突然想起来了,之前学C的时侯我给忘了,他的这个ar指向的是MSG副本的第一个元素,但是pt指向MSG的第一个元素
wp231957 发表于 2022-7-7 11:20
没看到哪里有不同啊
我真是忘了{:5_104:} 老沫白 发表于 2022-7-7 11:23
不是的朋友打印%P你试试,然后我突然想起来了,之前学C的时侯我给忘了,他的这个ar指向的是MSG副本的第一 ...
开玩笑啊,我要%p干啥 wp231957 发表于 2022-7-7 11:20
没看到哪里有不同啊
静态储存我忘得一干二净 老沫白 发表于 2022-7-7 11:23
不是的朋友打印%P你试试,然后我突然想起来了,之前学C的时侯我给忘了,他的这个ar指向的是MSG副本的第一 ...
哪来的副本的说法,define 就是替换 编译之前把所有MSG 都老老实实的替换为 KKKKK wp231957 发表于 2022-7-7 11:27
哪来的副本的说法,define 就是替换 编译之前把所有MSG 都老老实实的替换为 KKKKK
额,他字符串是不是存储在静态存储区,但是啊,程序开始时是不是才会为数组分配内存,这个时候他才应该将字符串拷贝到数组里面啊,这不就成副本了吗?这个知识点不偏吧 wp231957 发表于 2022-7-7 11:26
开玩笑啊,我要%p干啥
你试试,试试就知道了 wp231957 发表于 2022-7-7 11:27
哪来的副本的说法,define 就是替换 编译之前把所有MSG 都老老实实的替换为 KKKKK
其实吭,要是这个C语言真的按你这么说,那真的问题大了,众所周知指向String的指针要声明为const,就是因为改变String这个行为在C里面是未定义的嘛,可是数组不用声明为const,但你看数组其实是可以改变里面的元素的,如果没有副本那不还是未定义的行为么。 wp231957 发表于 2022-7-7 11:27
哪来的副本的说法,define 就是替换 编译之前把所有MSG 都老老实实的替换为 KKKKK
哥们,你怎么看,你看我说的对吧,
页:
[1]