社区
C++ 语言
帖子详情
char *p="" char p[]=""区别在那?
derek7
2005-02-22 07:33:55
char *p="" char p[]=""区别在那?
...全文
423
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";这
关于
char
*p = "";的思考
偶然记起在浏览别人的代码的时候发现有一处指针的初始化时这样写的:
char
*p = ""; 首先我们知道
char
*p = NULL;的意思是将p初始化为NULL(和'\0', 0)的意思一样,防止使用野指针p。不过
char
*p = "";又是什么意思呢? main.c测试如下:
char
*p = ""; printf("+++++++0x%08x\n", p);
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...
char
*p与
char
**p
char
*p与
char
**p
char
str[6]={‘H’,‘E’,‘L’,‘L’,‘O’,’\0’}
char
*p=str
char
** p=&p
char
*p相当于p取了str的地址, * p才是str的内容。而
char
** p相当 * p于取了 str的地址,**p才是str的内容。而p是 * p的地址 假若str是你的钱包,那么
char
* p 中的p在这里就是存...
char
*p = "abcd"; 和
char
a[] = "abcd"的
区别
从上面一节中“既然搞C++,那就必须和内存管理做斗争”,大家是不是貌似都懂了C++的内存管理?如果这么想,那就来分析一道题吧!俗话说“黑猫白猫能抓老鼠就是好猫”。 请问:
char
*p = "abcd"; 和
char
a[] = "abcd"的
区别
?指针p存储在什么区? 数组a存储在哪儿?它们有什么
区别
? 答案:指针p和字符数组都是在栈区,其中,"abcd"字面值在常量区,上面的
区别
是...
C++ 语言
65,208
社区成员
250,517
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章