社区
C语言
帖子详情
关于C中指针定义的字符串和数组定义的字符串的问题
hanxuedog
2011-12-08 08:24:15
例:
#include<stdio.h>
int main(void)
{
char string[] ="hello world";
puts(string);
*(string+1) = 'i';
puts(string);
return 0;
}
运行这个程序得到的结果是:
hello world
hillo world
其结果是正确的,可是如果"hello world"是以指针的方式定义的:char string[] ="hello world";
程序去不能运行,这是怎么回事?请高手解答
...全文
235
13
打赏
收藏
关于C中指针定义的字符串和数组定义的字符串的问题
例: #include int main(void) { char string[] ="hello world"; puts(string); *(string+1) = 'i'; puts(string); return 0; } 运行这个程序得到的结果是: hello world hillo world 其结果是正确的,可是如果"hello world"是以指针的方式定义的:char string[] ="hello world"; 程序去不能运行,这是怎么回事?请高手
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hanxuedog
2011-12-09
打赏
举报
回复
谢谢各位的帮助我明白了
CoolEgos
2011-12-08
打赏
举报
回复
[Quote=引用 9 楼 hanxuedog 的回复:]
引用 3 楼 w1003025426 的回复:
还有就是C/C++ code
char str[] = "hello world" 和 char *str = "hello world"
者两种赋值是不同的,第一种是把hello world字符串存放在str数组中,而第二种是str字符指针指向"hello world"这个常量字符串
那请问char *str[] = "hel……
[/Quote]char *str[] = "hello,world"; 定义一个指针数组指向里面的各个首地址(这个只有一个)
AnYidan
2011-12-08
打赏
举报
回复
快成月经帖了
CoolEgos
2011-12-08
打赏
举报
回复
上面的回答都正确。。。
hanxuedog
2011-12-08
打赏
举报
回复
[Quote=引用 3 楼 w1003025426 的回复:]
还有就是C/C++ code
char str[] = "hello world" 和 char *str = "hello world"
者两种赋值是不同的,第一种是把hello world字符串存放在str数组中,而第二种是str字符指针指向"hello world"这个常量字符串
[/Quote]
那请问char *str[] = "hello,world"; 这种赋值方式和前两种有什么区别?
turing-complete
2011-12-08
打赏
举报
回复
http://blog.csdn.net/mougaidong/article/details/6372765
走在路上的人吧
2011-12-08
打赏
举报
回复
*(string+1) = 'i';
字符串常量不能修改值吧
狂且
2011-12-08
打赏
举报
回复
http://topic.csdn.net/u/20081106/23/02545709-f008-41c5-86d0-d2eb8aa1e162.html?80823
这个里面你看看吧!
柯本
2011-12-08
打赏
举报
回复
可是如果"hello world"是以指针的方式定义的:char string[] ="hello world";?
楼主是不是想问
char *string="hello world";
程序不是运行吧
这个问题也快成日经贴了
对某些平台及编译器:字符串常量的地址的内容是不可修改的
char *string="hello world";
string[1]='i'; //出错,常量串所在地址内容不可修改
*(string+1) = 'i'; //同理
狂且
2011-12-08
打赏
举报
回复
char *string = "hello world".
这个字符串存储在只读数据区内. 不可写的. 操作系统会保护而报错.
string 只是保存了他的地址而已.
CSDN 里好多这个问题, 你搜搜看看.
无限生机
2011-12-08
打赏
举报
回复
还有就是
char str[] = "hello world" 和 char *str = "hello world"
者两种赋值是不同的,第一种是把hello world字符串存放在str数组中,而第二种是str字符指针指向"hello world"这个常量字符串
猪头小哥
2011-12-08
打赏
举报
回复
#include<stdio.h>
int main(void)
{
char *s ="hello world";
puts(s);
*(s+1) = 'i';
puts(s);
return 0;
}
这个意思??
如果是的话 因为“hello world”字符串常量 是在常量区 不能被修改的~~~与数组是不一样的
无限生机
2011-12-08
打赏
举报
回复
当用char *str = "hello world"定义时,字符串"hello world"是常量,不能对它经行更改,对它进行更改是一种无定义的行为。
C语言
中
指针
和
数组
详解
数组
是一种用于存储相同类型数据的集合。
数组
中
的每个元素都有一个固定的位置,并且可以通过索引访问。数据类型
数组
名[
数组
大小];
指针
是一个变量,它存储另一个变量的地址。数据类型 *
指针
名;int *ptr;
指针
和
数组
是C语言
中
两个非常重要的概念。通过理解它们的
定义
、基本操作和相互关系,程序员可以编写出更加高效、灵活的代码。
指针
和
数组
的应用场景非常广泛,包括动态
数组
、函数参数、
字符串
处理等。在实际编程
中
,正确使用
指针
和
数组
可以显著提高程序的性能和可维护性。
C语言 | 学习C语言
字符串
数组
,看这一篇就够了!
一、
字符串
的
定义
char *str1 = {"Hello world!"}; // 方式一 (可省略{}) char str2[] = {"Hello world!"}; // 方式二 (可省略{}) char str3[] = {'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\0'}; // 方式三 几种
字符串
定义
方式之间的区别: (1) 方式一的本质是
定义
了一个char型
指针
str1, 指向的是
字符串
常量Hello wo
字符串
与
指针
/a 代表首元素地址,&a 代表整个
数组
的首地址,和首元素地址一样,但是他们的步长不一样//a+1 跳一个元素,&(a+1) 跳整个
数组
长度// +4// +32//通过 typedef
定义
一个
数组
类型//有 typedef 是类型,没有 typedef 是变量//代表是一个
数组
类型,这里的 A 是一个数据类型,不是变量//等价写法:typedef int (A)[8];A b;//等价于 int b[8];关于 b 的各种操作,与 int b[8] 的各种操作是一致的。
C/C++ 字符
指针
数组
循环赋值
问题
前言:想用字符
指针
数组
char* strArr[10];存储多个
字符串
,通过while循环赋值产生的bug。 先看一段代码: main(){ char *strArr[5];//存储
字符串
的
数组
char str[10]; int i = 0; char *p = NULL; while (i<5){//循环赋值 gets(str); p = str; strArr[i] = p; i++;
C语言
数组
,
字符串
,函数,
指针
全解析
一维
数组
:数据类型
数组
名[元素个数];二维
数组
:数据类型
数组
名[行数][列数];//一维
数组
//1 2 3 4int arr[5];//局部作用域:随机值 全局作用域:默认值0//二维
数组
// 1 2 3// 4 5 6---> 存储在程序上的只读数据段,生存周期与程序一致1.将
字符串
常量(字面常量)直接赋值给str1
指针
(将
字符串
的首地址赋值给str1
指针
)str1只是一个普通的
指针
,但是指向的
字符串
是只读的---> 存储在栈上的字符
数组
,仅在作用域内有效。
C语言
70,039
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章