怎么不能理解成char* 为什么是字符指针?
好像没有看到字符指针这种说法 为什么?
33 个解决方案
#1
字符,你知道吧?
字符串就是字符的集合,而字符串指针就是指向这些字符在内存的首地址。
字符串就是字符的集合,而字符串指针就是指向这些字符在内存的首地址。
#2
请问哪本书上说char*是字符串指针的?
#3
其实也可以理解成字符指针,现在的p就是指向第一个字符的,指针加1,就可以指向下一个字符.
字符串指针是相对于整个字符集合来说的.
字符串指针是相对于整个字符集合来说的.
#4
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
char c = 'a';
char *p = &c;
printf("%c\n",*p);
return 0;
}
这个是什么?
#5
int main()
{
char c='c';
char * p = &c;
char str[] = "hello world" ;
cout << *p << endl;
p = str ;
cout << p << endl;
int j = 1;
p = (char*)&j;
cout << *p << endl;
return 1;
}
只是指向一个内存地址
看你怎么理解而已。
{
char c='c';
char * p = &c;
char str[] = "hello world" ;
cout << *p << endl;
p = str ;
cout << p << endl;
int j = 1;
p = (char*)&j;
cout << *p << endl;
return 1;
}
只是指向一个内存地址
看你怎么理解而已。
#6
你说的对,本质上讲,它是一个字符指针。
对于字符串来讲,它实际上是一个字符数组,数组的元素在内存上的储存位置是连续的,所以用字符数组的首地址就可以表示整个数组,C语言规定如果字符数组中有一个'\0',那这就是个字符串,所以char *可以表示一个字符串。
字符数组而并非字符串意义不大,字符串用的比较频繁。所以经常讲char *是一个字符串指针,当然 本质上它是一个字符指针
对于字符串来讲,它实际上是一个字符数组,数组的元素在内存上的储存位置是连续的,所以用字符数组的首地址就可以表示整个数组,C语言规定如果字符数组中有一个'\0',那这就是个字符串,所以char *可以表示一个字符串。
字符数组而并非字符串意义不大,字符串用的比较频繁。所以经常讲char *是一个字符串指针,当然 本质上它是一个字符指针
#7
char* 可以指向字符串的首地址
#8
对,可以理解。。。
比如:
char buffer[10];
其中,buffer是这一些列字符,整个字符串的首地址····
但是,其实,buffer只是指向了第一个,没有指向第二个,他们之间的关系你可以理解为:
几个兄弟,你知道老大的妻子,呵呵,根据妻子,得到老大,
哥几个站在一起,于是你知道了老三,老四的位置·~~
比如:
char buffer[10];
其中,buffer是这一些列字符,整个字符串的首地址····
但是,其实,buffer只是指向了第一个,没有指向第二个,他们之间的关系你可以理解为:
几个兄弟,你知道老大的妻子,呵呵,根据妻子,得到老大,
哥几个站在一起,于是你知道了老三,老四的位置·~~
#9
学习了
#10
那应该怎么理解
char buf[10] = "csdn";
char* a = buf;
为什么cout << a << endl;的时候不是数组的首地址 而是数组的全部内容?
如果要输出a的地址如何做?
#11
指针想指什么都行。。不过编译器总唧唧歪歪
#12
其实叫字符串指针仅仅是习惯而已
#13
mark
#14
用cout输出字符串的地址可以这样。
char *p = "abc";
cout < < (void)*&p < < endl;
这是cout对象的特性啊,是cout对象故意写成这样的,不是错误。
cout相比于c的printf,去掉了格式说明符,那么如何表示众多繁杂的格式呢,把cout设计得“智能”一点是一个可行的方案,至少iostream类的设计者是这样想的,cout的确比printf简单了不少。
#15
没有什么字符串指针,只有字符指针,只是这个指针是指向字符串的首个字符的地址!
#16
没有什么字符串指针,只有字符指针,只是这个指针是指向字符串的首个字符的地址!
#17
楼主这个问题问得好可爱
顶一个
顶一个
#18
这里对a 对行了隐式的类型转换。当cout发现形参是char * 型时,它净输出该地址所指向的字符串
#19
operator overloading?
#20
就是字符指针啊,输出的时候看你用什么格式了
如果是%c,那么肯定是输出一个字符的
如果是%s,那么就输出直到碰到‘\0’才结束的
如果是%c,那么肯定是输出一个字符的
如果是%s,那么就输出直到碰到‘\0’才结束的
#21
老谭
哪版我忘了
还是标题
#22
呵呵! 它其实就是一个指向地址的指针,就看你怎么看待了!
#23
字符指针和字符串指针其实是一个意思,当字符串只有一个字符时,指针就是它的地址;当有很多字符时,就是首地址。你看是不是一样了。
#24
常量指针,编译器在编译的时候,按照属性分别放在不同的区域
#25
是一连串常量地址空间的首地址···,
凡是试图写入那段内存··就会被报错···
凡是试图写入那段内存··就会被报错···
#26
楼主:
为何成为字符串指针,而不是字符指针。
第1,概念不同。字符指针指向一字符,无结束标识;字符串以\0作为标识。
第2,有许多针对字符串的函数,如strcpy,strcmp等,他们针对串进行操作。对字符指针无此概念。
为何成为字符串指针,而不是字符指针。
第1,概念不同。字符指针指向一字符,无结束标识;字符串以\0作为标识。
第2,有许多针对字符串的函数,如strcpy,strcmp等,他们针对串进行操作。对字符指针无此概念。
#27
我也正被这个问题困扰。
#include<stdio.h>
void main()
{
char *p,*q,*t,g[10],l[19];
p="abcdf";
t={'a','b','c'};
g="abcd";
l={'a','b','c'};
gets(q);
}
呵呵,楼主能辨清里面的对与错吗?辨清了,对指针的理解也就差不多了。
#include<stdio.h>
void main()
{
char *p,*q,*t,g[10],l[19];
p="abcdf";
t={'a','b','c'};
g="abcd";
l={'a','b','c'};
gets(q);
}
呵呵,楼主能辨清里面的对与错吗?辨清了,对指针的理解也就差不多了。
#28
cout < < &a[0] < < endl;
#29
汗 我觉得是指针呀~
#30
这个例子对初始化与赋值的区别也做了很好的诠释
#31
字符串指针就是指向一串字符在内存的首地址。
#32
说的很有道理。
#33
受益匪浅
#1
字符,你知道吧?
字符串就是字符的集合,而字符串指针就是指向这些字符在内存的首地址。
字符串就是字符的集合,而字符串指针就是指向这些字符在内存的首地址。
#2
请问哪本书上说char*是字符串指针的?
#3
其实也可以理解成字符指针,现在的p就是指向第一个字符的,指针加1,就可以指向下一个字符.
字符串指针是相对于整个字符集合来说的.
字符串指针是相对于整个字符集合来说的.
#4
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
char c = 'a';
char *p = &c;
printf("%c\n",*p);
return 0;
}
这个是什么?
#5
int main()
{
char c='c';
char * p = &c;
char str[] = "hello world" ;
cout << *p << endl;
p = str ;
cout << p << endl;
int j = 1;
p = (char*)&j;
cout << *p << endl;
return 1;
}
只是指向一个内存地址
看你怎么理解而已。
{
char c='c';
char * p = &c;
char str[] = "hello world" ;
cout << *p << endl;
p = str ;
cout << p << endl;
int j = 1;
p = (char*)&j;
cout << *p << endl;
return 1;
}
只是指向一个内存地址
看你怎么理解而已。
#6
你说的对,本质上讲,它是一个字符指针。
对于字符串来讲,它实际上是一个字符数组,数组的元素在内存上的储存位置是连续的,所以用字符数组的首地址就可以表示整个数组,C语言规定如果字符数组中有一个'\0',那这就是个字符串,所以char *可以表示一个字符串。
字符数组而并非字符串意义不大,字符串用的比较频繁。所以经常讲char *是一个字符串指针,当然 本质上它是一个字符指针
对于字符串来讲,它实际上是一个字符数组,数组的元素在内存上的储存位置是连续的,所以用字符数组的首地址就可以表示整个数组,C语言规定如果字符数组中有一个'\0',那这就是个字符串,所以char *可以表示一个字符串。
字符数组而并非字符串意义不大,字符串用的比较频繁。所以经常讲char *是一个字符串指针,当然 本质上它是一个字符指针
#7
char* 可以指向字符串的首地址
#8
对,可以理解。。。
比如:
char buffer[10];
其中,buffer是这一些列字符,整个字符串的首地址····
但是,其实,buffer只是指向了第一个,没有指向第二个,他们之间的关系你可以理解为:
几个兄弟,你知道老大的妻子,呵呵,根据妻子,得到老大,
哥几个站在一起,于是你知道了老三,老四的位置·~~
比如:
char buffer[10];
其中,buffer是这一些列字符,整个字符串的首地址····
但是,其实,buffer只是指向了第一个,没有指向第二个,他们之间的关系你可以理解为:
几个兄弟,你知道老大的妻子,呵呵,根据妻子,得到老大,
哥几个站在一起,于是你知道了老三,老四的位置·~~
#9
学习了
#10
那应该怎么理解
char buf[10] = "csdn";
char* a = buf;
为什么cout << a << endl;的时候不是数组的首地址 而是数组的全部内容?
如果要输出a的地址如何做?
#11
指针想指什么都行。。不过编译器总唧唧歪歪
#12
其实叫字符串指针仅仅是习惯而已
#13
mark
#14
用cout输出字符串的地址可以这样。
char *p = "abc";
cout < < (void)*&p < < endl;
这是cout对象的特性啊,是cout对象故意写成这样的,不是错误。
cout相比于c的printf,去掉了格式说明符,那么如何表示众多繁杂的格式呢,把cout设计得“智能”一点是一个可行的方案,至少iostream类的设计者是这样想的,cout的确比printf简单了不少。
#15
没有什么字符串指针,只有字符指针,只是这个指针是指向字符串的首个字符的地址!
#16
没有什么字符串指针,只有字符指针,只是这个指针是指向字符串的首个字符的地址!
#17
楼主这个问题问得好可爱
顶一个
顶一个
#18
这里对a 对行了隐式的类型转换。当cout发现形参是char * 型时,它净输出该地址所指向的字符串
#19
operator overloading?
#20
就是字符指针啊,输出的时候看你用什么格式了
如果是%c,那么肯定是输出一个字符的
如果是%s,那么就输出直到碰到‘\0’才结束的
如果是%c,那么肯定是输出一个字符的
如果是%s,那么就输出直到碰到‘\0’才结束的
#21
老谭
哪版我忘了
还是标题
#22
呵呵! 它其实就是一个指向地址的指针,就看你怎么看待了!
#23
字符指针和字符串指针其实是一个意思,当字符串只有一个字符时,指针就是它的地址;当有很多字符时,就是首地址。你看是不是一样了。
#24
常量指针,编译器在编译的时候,按照属性分别放在不同的区域
#25
是一连串常量地址空间的首地址···,
凡是试图写入那段内存··就会被报错···
凡是试图写入那段内存··就会被报错···
#26
楼主:
为何成为字符串指针,而不是字符指针。
第1,概念不同。字符指针指向一字符,无结束标识;字符串以\0作为标识。
第2,有许多针对字符串的函数,如strcpy,strcmp等,他们针对串进行操作。对字符指针无此概念。
为何成为字符串指针,而不是字符指针。
第1,概念不同。字符指针指向一字符,无结束标识;字符串以\0作为标识。
第2,有许多针对字符串的函数,如strcpy,strcmp等,他们针对串进行操作。对字符指针无此概念。
#27
我也正被这个问题困扰。
#include<stdio.h>
void main()
{
char *p,*q,*t,g[10],l[19];
p="abcdf";
t={'a','b','c'};
g="abcd";
l={'a','b','c'};
gets(q);
}
呵呵,楼主能辨清里面的对与错吗?辨清了,对指针的理解也就差不多了。
#include<stdio.h>
void main()
{
char *p,*q,*t,g[10],l[19];
p="abcdf";
t={'a','b','c'};
g="abcd";
l={'a','b','c'};
gets(q);
}
呵呵,楼主能辨清里面的对与错吗?辨清了,对指针的理解也就差不多了。
#28
cout < < &a[0] < < endl;
#29
汗 我觉得是指针呀~
#30
这个例子对初始化与赋值的区别也做了很好的诠释
#31
字符串指针就是指向一串字符在内存的首地址。
#32
说的很有道理。
#33
受益匪浅