社区
C++ 语言
帖子详情
char *p="" char p[]=""区别在那?
derek7
2005-02-22 07:33:55
char *p="" char p[]=""区别在那?
...全文
404
15
打赏
收藏
char *p="" char p[]=""区别在那?
char *p="" char p[]=""区别在那?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
哈哈哈啊002
2005-02-24
打赏
举报
回复
sjssunjs(大海) 说的对
zhanghk
2005-02-24
打赏
举报
回复
p是指向全局内存的指针,这个内存是exe映射时的相应的地址,所以这样用时最好加上const,即const char *p = "";
第二个timepalette(时间调色板) 说的对,是在栈内的一块内存,要做拷贝,所以效率会慢一点。
LoveCreatesBeauty
2005-02-24
打赏
举报
回复
http://www.eskimo.com/~scs/c-faq/q1.32.html
tokens
2005-02-23
打赏
举报
回复
编译通过并不等于它不是非法的..
如char *p;
p = 0;//地址为0也通过,
*p = 'a';//但你运行看看.
sjssunjs
2005-02-23
打赏
举报
回复
实质是指针与数组的区别,char *p="" 定义了指向char型的指针,该指针所指的内存存储的值为空。char p[]=""定义了字符数组,该数组的长度为零,内容为空。虽然指针和数组在一些对其内的数据操作上有相似的地方,但是二者的差别是本质的:指针是动态的分配存储空间,数组是静态的分配空间,并且指针所分配的空间是可以改变大小的,数组的空间一旦分配,就不能改变大小!
gooderfeng
2005-02-23
打赏
举报
回复
在gcc上char*是char const*型别,不能更改字符.
to shikn
p[] *p不是都是转成*(p + 0) 吗
或者p[i] *p[i] 转成*(p + i)
jiajie828
2005-02-23
打赏
举报
回复
第一个指针指向常量!不允放修改的
ybt631
2005-02-23
打赏
举报
回复
char *p=" " 就是const char *p
char p[]=" " char *const p;
疯狂低调
2005-02-23
打赏
举报
回复
没错,的确通过了,但运行中出现错误!
看来 char* p="";
产生的是常量指针!
zjyu88
2005-02-22
打赏
举报
回复
的确能编译过..但在运行其间出问题...
我用的是DEV C++
zjyu88
2005-02-22
打赏
举报
回复
char *p=":ksj";它是一个const字符串,,所以它应该不能p[0]='s';的修改操作..
楼上的既然能通过,我有点不解,是编译器的问题吗?
pcboyxhy
2005-02-22
打赏
举报
回复
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
char *p=":ksj";
p[0]='\0';//ok
char c;
p=&c;//ok
system("PAUSE");
return 0;
}
编译通过。
不知 Leung 说的不合法是什么意思。
shikn
2005-02-22
打赏
举报
回复
除了分配的存储空间不一样, 还可以看一下《C专家编程》这本书,上面讲了,p[]和*p本身也不同, 取*p的过程要比取p[]多一个步骤, 取*p,显要取到p的值,在取*p, 取p[]可以直接取, 效率稍稍有些差别,不过多一个汇编语句, 影响不大,不过传递参数的时候, 声名和定义就要注意了.
Leung_
2005-02-22
打赏
举报
回复
对第一个p的修改是非法的: p[0] = 'd';
对第二个p的修改是合法的: p[0] = 'd';
timepalette
2005-02-22
打赏
举报
回复
char p[] = "abc",是在栈上分配4个字节内存给p,再把"abc"拷进去。p的指向的地址是在栈上的(sp附近)
char *p = "abc", "abc"在编译时被作为一个全局变量,是不在栈上的,p指向的地址不在栈上。最好不要这样写。
关于
char
*p=“abc“; 报错的事
以下是一个笨蛋大学生敲代码所遇到的小知识: 我在用vs2017尝试
char
*p="abc";的时候报错了,如下: 但是我在学C的时候这么写好像没什么问题,我又去C里试了一下: 也没有任何警告,看起来完全没问题。 然后我就去网上找问题,发现一篇文章说的很明白: C/C++中
char
* p = "hello" 和 const
char
* p = "hello"的
区别
- thinkingfor - 博客园 (cnblogs.com) 在写代码常常都会写
char
* p ="hello";这
关于C语言
char
*p =“abc“ 的理解
疑问 学习过程中,了解到 int *p = &a; 即把变量a的地址赋值给p。所以p里面存的是一串地址。 后来经常看到
char
*p =“abc”; 这样的写法,产生疑惑:“abc”也是一串地址吗?32位系统下一个指针占4个字节,如果赋值时,“abc” 双引号里面的字母有成百上千个,那4个字节装得下吗? 解答 C语言里没有字符串类型,“abc” 这样的字符串其实是字符数组的简写,即 {‘a’, ‘b’, ‘c’, ‘\0’} 。 //写法1
char
*p ="abc"; //写法2
char
char
*p = new
char
; 和
char
*p2 = "abcdef"的
区别
char
*p = new
char
; 和
char
*p2 = "abcdef"的问题 今天在写代码时,突然间想到一个问题,如果我
char
*p = new
char
;出个指针,是否 可以这样操做,对p赋常量字符串呢? p = “abcdef”; 先做个实验: 1 #include 2 using namespace std; 3 void main() 4
C/C++中
char
* p = “hello world“ 和 const
char
* p = “hello world“的
区别
这个行为在不同的c和c++的编译器上有会不同的行为,应该说
char
*a = "hello world";这种写法不能算错误的写法,所以c编译器不报错也不警告。早期的K&C认 为这是完全合法的,但从K&C第二版标准开始就明确指出“修改string literal的结果是未定义的,字符串并不总是可修改的,可能会放在只读内存区域“。从C89开始,这个问题有了更明确的规定。
char
*a = "hello world";定义a是一种字符指针类并使用指定的字符数组(类型为array of
char
)
char
*p="abc" 与
char
p[]="abc" 的
区别
有这样一段代码:view plaincopy#include "stdio.h"
char
*get_string_1(){
char
p[] = "hello world!";return p;}
char
*get_string_2(){
char
*p = "hello world!";return p;}int main(){
char
*p;p = get_string_1();printf("g...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章