指针指向的字符数天蝎做网站建网站组长度的获取方法转载

来源:服务器技术网nifengsoft.com- 阅读:1070155

摘要:服务器技术网nifengsoft指针指向的字符数天蝎做网站建网站组长度的获取方法转载指针指向的字符数组长度的获取方法转载_wdky2013_新浪博客,wdky2013,

指针指向的字符数天蝎做网站建网站组长度的获取方法转载

----

sizeof的意思是返回一个对象在内存中的字节数,是size_t类型的。楼主把指 针和数组弄混了,bhjqw,他们是两个不同的对象,河马家老板,如果声明一个指针,比如 char* pstr = "hello";pstr是一个指针,那么sizeof(pstr)的值是4,如果声明一个数组,比如 char pstr[] = "world";这时,pstr代表一个数组,那么sizeof(pstr)的值就是这个数组在内存中的字节数。 这里如果是char pstr[] = "world"; char数组在内存中的字节数为什么是4,而不是world有五个字符,龙虎逆神传下载,一个字符4个字节,那就是4*5=20?谢谢!

 

a在编译期由右端的字符串字面量(引号为边界的部分)初始化,确定为常量,隐窝窝娱乐网,类型为const char[]而不是char[]。
这里char str[] = "world";声明并定义了一个数组str[](当然,C语言的语法不允许在定义之外这样引用整个数组,网上放贷,以下这样的写法只是为了区分语义),之后标识符str有双重语义:一是如2L所说的类型为char* const的地址常量,它的值等于数组中首个元素的地址,即str等价于(char* const)&str[0];二是表示整个str[]数组这个语法对象。在sizeof(str)中,str表示的含义是str[],惜别的海岸简谱,因此返回整个数组的大小(这个大小在之前的数组定义中已经确定了);而pstr只是个指针,sizeof(pstr)只能返回指针本身占用的字节数而不能确定为它指向的内容分配的空间的大小。

int main()
qds316 说:“当使用cout()或者printf()输出该类型变量,就是字符串数组的时候,就会输出数据直至遇到\0为止”。
 int bb = strlen(ptr);
这里初始化不限定长度,而"world"包含结束符'\0'后为6个字符,伤感分手日记,因此初始化str的长度是6;又因为char数组中每个元素(char变量)占用1个字节的空间,所以str[]数组的大小是6字节。
----

#include <iostream.h>
关于数组名语义规定以及2L错误的剩余部分(“数组名实际上就表示一个指针”)的原因见

 char *p= new char[100];

2010-1-16 15:09

(注意,桨组词,地址常量绝不是指针,类型不同!虽然在函数的参数传递过程中,地址常量可以退化成对应的指针。这里LZ和2L显然由于这个错误理解导致对数组的sizeof()结果判断有误。)
Dev-C++下编译通过,运行结果6 4。
----

注意:如果sizeof(字符数组名),二垒是什么意思,可以用上一篇的方法得到。

#include <string.h>

}
----
printf("%d %d",sizeof(str),sizeof(pstr));
}

}

经过参数传递后,地址常量退化为对应类型的指针。也就是说在“<<”重载函数对应实现的内部而言,通过值参传递(a的值被复制在函数内产生一个副本),权色当道,可以成为一个const char*类型的变量。注意这里const指指针指向的内容不可改变,而不是指针本身的值不可改变。
4

int main()


{
昏昏灯火语生平 说,a是char[]类型,这是不确切的。
这里有问题。首先,cout()写法错误;其次,a是常量,不是变量。当然,对于cout来说,常量作为“<<”的操作数也能和变量以一样的形式输出(参见以上讨论),因为本身是只读操作,而a又是可以合法访问的,自然没有影响。
以上讨论的问题引发的关于数组名称的问题:
无论如何,汤臣一品二公子,这确实是一个地址常量而非指针(以整数形式保存地址值的变量),这点是正确的。但LZ并没提到指针- -...

char a[]="abcd"; cout<<a<<endl; 会输出abcd 指针问题 有点不太理解 a不是存储字符串abcd的地址吗 那输出这个地址为什么会输出abcd呢?

(本来这个问题并不复杂,但是由于LS个别概念有些问题,异界征天霸美,所以还是深入回答一下算了- -。)
 return 0;
#include <stdio.h>

char a[]="abcd"

 p = "string";
 return bb;
robinren240 提到的大体正确,细节错误上面已经说了。

小例子:

C/C++是传统的强类型语言。尽可能清楚掌握“类型”对于理解程序和写出更高质量C/C++的代码都有帮助。
 cout<<b<<endl;
由于pstr是指针,无论是否指向字符串,指向什么字符串,sizeof(pstr)等于sizeof(int),32位平台上等于4。
----
1L正确,2L错误。

2

----
解释:
{
关于LZ的问题:a本身的值确实只是一个const char*类型的地址。但C++中cout是被定义好的一个类的对象,沦落天涯幽独,它和运算符“<<”连用时<<发生重载,语义被解释为输出<<右端指示的字符串。具体是通过运算符重载实现,类似于调用函数,只是右操作数作为地址被传入这个函数,然后函数内解析地址进行输出。注意重载是区分类型的,所以如果a不是字符数组名而是int变量或者其它类型的话,(只要有定义过——对于基本类型在STL中已有定义)调用的是不同的输出函数,仍能得到正确结果。至于这里的具体行为,是由重载的运算符(函数)对传入的参数指向的地址开始依次(从低地址到高地址,逐个地)扫描并输出该地址的char字符(准确来说是写入标准输出流stdout,至于stdout里的字符怎么跑到屏幕上的实现过程是操作系统的事),怅然川光暝,直至遇到'\0'停止运行。它和C标准I/O方式的printf("%s",a)类似(而不是puts(a),puts会把末尾的'\0'转化为换行)。
造成差别的原因:
return 0;

在对数组进行操作时,残爱死神复仇公主,可能需要计算数组长度,方法是:sizeof(数组名)/sizeof(元素类型)

指针指向的字符数组长度的获取方法,不能用sizeof,因为用sizeof(指针),得到指针长度为4

 int b = num(p);

====

3

int num(char *ptr)

一般来讲,莉亚迪桑38分35截图,定义数组,花呗提现找嗨贝嗨车网,要给定其长度,也可以用Type a[ ] = {……} 的方式。

char str[] = "world", *pstr = "world";

应该用strlen()函数。

数组名本身是个地址常量,西子书院,但是某些特殊情况下它的语义可以发生改变。例如sizeof(a),侯马588信息网,这时a表示整个数组对象(这里指语法对象,不是指类的实例)而不是这个常量本身。基于这个语义,对数组名取地址也是合法的,319枪声,对于数组a来说&a的结果等于a这个地址常量本身的值。这是C/C++标准委员会为了维护语法对象a作为一个左值(l-value)总可以取地址这条原则的妥协。
getchar();
{
测试代码:
char str[] = "world";
char *pstr = "world";
,儋州365网