c语言,字符型指针char *s的长度,为什么sizeof(s)与sizeof(*s)的长度为什么不一样?

Python015

c语言,字符型指针char *s的长度,为什么sizeof(s)与sizeof(*s)的长度为什么不一样?,第1张

首先,两个sizeof所求的东西完全不一样,另外sizeof是编译的时候就求出长度,非运行的时候。sizeof(s)是求指针长度,因为变量定义的是char *s,这个长度可能是2,可能是4,还可能会是8,是由编译的时候决定的,比如VC6.0编译器长度就是4,因为VC6.0是32位的编译器,它的地址长度是32位表示,4个字节。gcc64位编译器则长度是8,64位系统地址表示长度64位8字节。TC是16位编译器,所以长度是2。综上sizeof(s)与电脑位数和总线有关,但是最重要的是与编译器有关,win64位的系统也可以运行32位的程序,VC6.0编译的程序在win64上运行,sizeof长度依然是4。如果程序gcc64位编译的,则不能运行在XP32位的系统上sizeof(*s)是求字符的长度,长度为1,不管什么编译器长度不变。

在C语言中 字符串一般是动态分配和字符数组两种形式 动态分配的时候字符串字符串指针是4个字节 字符串的大小根据自己的需要来申请 比如: char * c;//C为字符串指针 占用四个字节 c = (char*)malloc(sizefo(char) * N) //N为字符串中字符的个数希望对你有帮助