字符指针存储
‘壹’ 请通俗一点的讲讲指针是怎么存储的
指针是存储内存地址的变量,只是一种变量而已
就像int的变量存储整形
就像float的变量存储浮点形
就像char的变量存储字符形
就像double的变量存储高精度浮点形
char *,int *,float* 定义的指针都是一样的,用来存放内存地址.一般来说可以存储2^32次方那么大的内存地址.
之所以有那么多类型的指针是方便写代码,同时支持指针的自我加减操作.
最终的操作都是转化成void*的指针来操作
假设你要读取内存地址为0x5201314的那块内存 void *p = 0x5201314;
cout<<(int)*p;//读取4个字节
cout<<(char)*p;//读取1个字节
。。。。。。
‘贰’ c语言,字符串指针指向的字符串,那个字符串存储在哪个位置
你要位置,把内存地址都给你打印出来了。然后你怎么又牵扯到常量了?动态申请的变量(即malloc函数申请的变量)存放在堆区!
idxbuf=malloc(6*sizeof(char));
动态随机分配内存空间,共6个char型数据大小的空间,因为是随机的,idxbuf指针指向的内存空间的起始地址在后面的语句中打印出来:
printf("before idxbuf address:%p,idxbuf:%s ",&idxbuf,
&idxbuf:取地址,%p与指针对应,是输出指针的地址。
address:0x7ffeffc9f0b0,就是字符串指针idxbuf指向的字符串存储在内存中的地址位置。
你要字符串指针idxbuf的随机分配的地址,只需要
printf("before idxbuf address:%p ",&idxbuf);
这一语句就可以了,原来的程序编译有点问题,修改之后通过:
程序先编译后链接,转换成0与1的机器代码后调入内存运行。这个问题被你牵扯到程序运行的内存分配方式,而不是你所说的想找字符串在内存中的地址。请用内存分配方式详解提问!
简单的说,一个程序调入内存后,在内存中分为以下5个部分。
1、栈区(stack)
2、堆区(heap)
3、全局区(静态区)
4、文字常量区
5、程序代码区
内存分配详细不说了,
因为我已经很明确的根据提问回答了字符串存储的位置:address:0x7ffeffc9f0b0。
‘叁’ c语言 字符指针数组里面的字符串存储在哪
有个概念得弄清楚:字符指针“里面”是没有字符串的!一个有效的字符指针,如果指向了一个已经存在的字符串,那么这个指针的“值”就是这个字符串的第一个字符的地址。根据这个理解,就是得“先”有字符串,后让字符指针指向这个字符串才有可能,否则指针就是无效的。所以,有效的字符指针指向的字符串“原先”在什么地方存储它还在什么地方。有个一般性的规则:动态创建的字符串在堆里,普通创建的字符串在栈里。无论堆里或栈里,都是系统在内存中划分的一块区域,只是访问方式和生存周期不太一样而已……
‘肆’ 字符指针存放
"Love china"存放在常量区,而p,q则是在栈中,putchar函数的参数是char型,*p是p指针的解引用,所以传入的是p所指向的字符,p++后指针后移,再次传入的就是下一个字母,所以第一个循环按原顺序打出了Love china,C++中的字符串以‘\0’结束,所以遇到‘\0’就可以终止打印,整个字符串输出完毕。
像puts这种函数的参数是char*,传入指针后会自动打印并是指针后移直至遇到‘\0’,作用和第一个循环是一样的。无所谓是以字符串存放的还是字符形式存放的,p是指针,指向了内存的一个地址而已。
‘伍’ 字符指针是如何存放字符串的
字符指针无法存放字符串,只能指向一个字符串的起始地址。从字符串指针的定义方式(如char *c = "K&R";)可以看到,c存放字符'K'的地址,c+1后指向'&'的地址,因此*c == 'K',不是"K&R".
‘陆’ c语言中,字符串指针怎样实现对字符串的读取与存储
比如char s[30];
数组名s可以看作数组的首地址,可以直接对它进行操作;
或用一个char指针:char *p(注意:"字符串指针"没有这个说法,可以叫做指向字符数组的指针)
p = s;或p = &s[0];用指针p指向s数组的首地址。
不知读取是指打印还是引用;假如要访用一个元素,可以用*(p + i),i指偏移量相当于p[i];也可以把p当成数组名用,比如p[2]指的是数组s的第三个元素,假如把‘a’赋给第n个元素:*(p+n-1) = 'a';或p[n-1] = 'a';
如果直接用指针存个字符串:前提是字符串大小不能超过30 - 1;scanf("%s",p);复制可以使用
strcpy(p,"..........")等;
如果不通过指向字符数组:那么必须要内存分配,用到malloc函数;
例如p = (char *)malloc(sizeof(char) *30);给指针p分配一个大小30字节的内存用来存储字符串;
接下来和上面差不多,不过p[30]必须是有结束符'\0';
‘柒’ 字符指针最多能指向多大的内存空间
不管是字符指针还是int指针,还是什么其它的任何指针,他能指向的最大内存空间由使用的系统决定,如32位系统,因为指针存储的是地址数据,而在32位系统中指针占4个字节,因此最大指向2^32 = 0x1 0000 0000=42亿多的字节空间。
‘捌’ 字符指针实际上存储的是字符串常量值对吗
不对的。
字符指针实际上存储的是一个内存地址的值。编译系统把该内存地址所存储的值作为“字符”来解读。
‘玖’ 字符指针存储空间
在32为系统,指针都是4个字节,不管是什么类型的。
怎么可能有一个字节的,一个字节的寻址252,怎么能够寻址到4g的空间呢,所以指针都是32位,4个字节
‘拾’ char a[]字符数组和char*b字符指针为什么都可以储存字符串呢 有没有老司
如果你学过c++就知道, char [num]; 会有一个string类型替换。
数据是相同元素的集合,char数值 储存字符串不是很正常嘛。【字符串是数值的集合】
char*b="aabbcc"; b指针指向"aabbcc" 的首地址,通过b的首地址,可以找到"aabbcc"、