社区
C++ 语言
帖子详情
char *p="" char p[]=""区别在那?
derek7
2005-02-22 07:33:55
char *p="" char p[]=""区别在那?
...全文
410
15
打赏
收藏
char *p="" char p[]=""区别在那?
char *p="" char p[]=""区别在那?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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指向的地址不在栈上。最好不要这样写。
关于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
char
*a = “hello“;
char
*b = “hello“; if(a= =b) printf(“YES“); else printf(“NO“);
#include "stdafx.h" #include<stdio.h> #include<string.h> int main(void) { const
char
*a = "hello"; const
char
*b = "hello"; if (a == b) printf("YES\n"); else printf("NO\n&q
【C++】
char
*p=“abc“ 与
char
p[]=“abc“
char
p[] = “abc”;
char
p[] = “abc”;把常量区的字符串值取出来放到寄存器,再由把寄存器中的值拷贝到栈内空间 p数组作为局部变量被存储在栈区; "abc"不是常量,编译器把这个语句解析为
char
str[4] = {‘a’,‘b’,‘c’,’\0’}; 如果
char
p[] = “abc”;写在函数内部,那么这里的"abc\0"因为不是常量,所以应该被放在栈上。
char
*p = “abc”; 在这个声明中,"abc"被存储在静态数据区(全局).rodata, "abc"
char
* p3 = "1";和
char
* p1 = 1;
区别
char
* p3 = "1";和
char
* p1 = 1;
区别
以前都不会导致看到这个两个十分不理解。 说是第一个是p3指向的内容是1,第二个是p1指向内存地址1。我问为什么,表达式的前半截都是一样的,怎么一个就是内容,一个就是地址了。得到的答案是:就是这样。 再次遇到的时候,后者已经深刻理解了,前者在编译的时候编译器提醒了我:
C++ 语言
65,190
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章