#include <stdio.h>
#include <string.h>
int main()
{/*char *str = {'h','e','l','l','o'};//运行错误,scalar object 'str1' requires one element in initializer*//*char *str = "hello";//hello在静态存储区,内容是不可更改的,str这个指针在栈区str[0] = 'H';//静态存储区不可被修改*//*char *str = "hello";strcpy(str,"hello world");//运行错误,strcpy要复制到内存里,这里没有分配内存*/char *str = "hello";str="world";//从指向hello转为指向worldprintf("%c\n",str[0]);printf("a way of visiting string in pointer:%c\n",*(str+2));printf("offset visiting:%s\n",str+2);printf("length:%d,content:%s\n",strlen(str),str);return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{/*char str[] = {'h','e','l','l','o'};//运行有点问题,数组转换成字符串后可能没有'\0'的结尾*//*char str[] = "hello";printf("%d\n",sizeof(str));strcpy(str,"worldfdsa");printf("%d\n",sizeof(str));//用strcpy复制后的str的长度并不增加,所以只要重新赋值长度大于以前的,会出现问题的,不推荐*//*char str[] = "hello";str="world";//运行错误,这里相当于一个数组,数组的头指针指向不变*/char str[] = "world";str[0] = 'W';printf("%c\n",str[0]);printf("a way of visiting string in pointer:%c\n",*(str+2));printf("offset visiting:%s\n",str+2);printf("length:%d,content:%s\n",strlen(str),str);return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{/*char *str = (char *)malloc(sizeof(char)*20);//在堆区str = {'h','e','l','l','o'};//运行错误*/char *str = (char *)malloc(sizeof(char)*20);strcpy(str, "world");str[0] = 'W';/*char *str = (char *)malloc(sizeof(char)*20);str = "world";//这样你动态分配的就没了,成了一块野区,造成了内存泄漏str[0] = 'W';//由于指向了静态存储区,所以不可被修改*/printf("%c\n",str[0]);printf("a way of visiting string in pointer:%c\n",*(str+2));printf("offset visiting:%s\n",str+2);printf("length:%d,content:%s\n",strlen(str),str);free(str);return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{/*char str[20]={'h','e','l','l','o'};str[0] = 'H';*//*char str[20];//在栈区printf("%d\n",sizeof(str));strcpy(str, "world");printf("%d\n",sizeof(str));//赋值内容不可超过上限*//*char str[20] = "hello";str = "world";//运行错误,数组的头指针不可指向静态存储区*/char str[20] = "world";str[0] = 'W';printf("%c\n",str[0]);printf("a way of visiting string in pointer:%c\n",*(str+2));printf("offset visiting:%s\n",str+2);printf("length:%d,content:%s\n",strlen(str),str);return 0;
}
  • char *str = "hello";
    这里的指针str是在栈区,而”hello\0”是在静态存储区,一旦赋值就不允许修改,但是可以访问,str指向了字符串内容的头指针

  • char str[] = "hello";
    这里的指针str是在栈区,”hello\0”也是在栈区,它相当于一个数组,你不可以改变它重新指向一个静态存储区的字符串,可以修改

  • char *str = (char *)malloc(sizeof(char)*20);
    str在栈区,数组内容在堆区,用strcpy赋值或者一个个元素赋值,可以被修改,若使用
    str = "world";
    会导致str的指针指向了静态存储区的”world\0”字符串,导致内存泄漏

  • char str[20] = "hello";
    str在栈区,数组内容在栈区,初始化时赋值或者一个一个元素赋值或者用strcpy赋值,你不可以改变它重新指向一个静态存储区的字符串,可以被修改

  • 以上只要赋值方式正确,均可通过数组方式或者指针方式访问其中内容

c语言字符串与数组还有指针的总结(1)相关推荐

  1. c语言指针转换成数组,浅议C语言中灵魂数组和指针的互操作(转)

    浅议C语言中灵魂数组和指针的互操作(转)[@more@]曾听好多朋友说,C是一种怀旧的语言,因为它的历史很久远,然而自从各种面向对象的编程语言的相续出现让它的影响力日减. 当然了,这是无可非议的,但是 ...

  2. c语言未初始化的指针下标访问是0,C语言的二数组的指针访问.doc

    C语言的二数组的指针访问 二维数组的指针访问 --王炳华 指向二维数组的指针及用指针访问二维数组,是学习指针的最大难点.如果真正弄懂了这个问题,就可以说你学会了使用指针. 二维数组的指针 指针就是地址 ...

  3. c语言二维数组 ppt,C语言二维数组与指针.ppt

    C语言二维数组与指针.ppt 好好考,全国计算机等级考试 二级C语言,第12讲 二维数组与指针,二维数组的定义 数组元素的引用及初始化 二维数组和指针 二维数组名和指针数组作为实参 二维数组程序举例 ...

  4. c语言 字符串和数组指针,C语言数组与指针一本道来

    数组与指针.png 指针的基础 注意本节内容可能在gcc下不能完成编译,请切换到Windows平台,使用dev-cpp或其他 指针本质上也是一个变量 指针要占用一定的内存空间(任何类型的指针的内存大小 ...

  5. C语言 函数返回数组和指针区别

    1.示例代码 #include <stdio.h>char * str1() {char A[] = "Hello!";return A; } char * str2( ...

  6. C语言二维数组的指针写法

    C语言中二维数组要用Int** 来表示,在分配空间后,int**加一会移动到下一行.而m行n列的二维数组的寻址方式是首地址a+in+j,因此先对a+i找到相应的行,也就是一维数组,并且取得到一个int ...

  7. C语言再学习 -- 数组和指针

    一.数组 1.数组介绍 数组(array)由一系列类型相同的元素构成.例如: int arr[10]; float candy[25]; char code[12]; 以上数组声明中包括数组元素的数目 ...

  8. c语言笔记之数组和指针(初学者)

    数组 定义 由数据类型相同的一系列元素组成 size_t arr[index]={ } *当{}内列出元素的值,可以让编译器自己数出数组大小,此时index可省略不写.数组的长度可以用(sizeof ...

  9. C语言学习笔记---数组和指针的区别

      在平时使用数组和指针的时候,感觉他们的使用很类似.那么数字和指针在使用的过程中到底有什么区别呢?   下面通过一个例子来简单分析一下. char str1[] = "abcdef&quo ...

最新文章

  1. 智慧城市搞圈地卖设备的思路该结束了
  2. android系统tee接口,Android操作系统上的TEE / HSM支持
  3. Django ORM那些相关操作
  4. 机器之心 Synced 08月12日 20:59
  5. python两种生成md5的方法
  6. 2440 休眠唤醒的实现过程(作者:wogoyixikexie@gliet)
  7. vivado中如何读取十进制小数_二进制十进制间小数怎么转换,原来是这样的
  8. @程序员,夏天来了,你该送心仪女生这个啦
  9. I00008 百鸡问题
  10. java并查集找朋友圈_并查集求朋友圈最大人数
  11. mysql 备份表_删库一定要跑路吗?手把手教你MySQL数据恢复
  12. 《疯狂的站长》站长必读书籍
  13. 图片处理的几种算法(毛玻璃效果,高斯模糊效果,旧时光效果,lomo效果,暖意效果)
  14. ⛽zipkin2.reporter.InMemoryReporterMetrics导致服务器CPU100%及应用OOM问题排查和解决
  15. 2018年中考计算机考试成绩,2018年北京中考考试科目、时间及成绩公布通知
  16. 百度地图level对应距离(比例尺级别对应的多少米)
  17. 漫画:网站访问缓慢怎么办?
  18. 九张图看懂互联网金融模式
  19. SE-Networks
  20. Xcode一键发布到AppStore

热门文章

  1. css 更改所有text,CSS之cssText
  2. 手机怎么测量物品高度?原理是什么?
  3. 小白之AuthorizeAttribute权限控制(一)
  4. 监控增加流媒体服务器的好处,视频监控服务器主要有哪些优势及特点
  5. 2017蓝桥杯C/C++ 省赛A组,C组混搭
  6. 莫斯科冬季雪景Mac动态壁纸
  7. pom中运行ant命令
  8. 【画册设计软件】名编辑电子杂志大师教程 | 页面编辑面板
  9. 漫威史上最黑暗 美国队长3英雄内战导火索 雷神索尔去哪了?
  10. (4)ESP32 Python 用OLED播放Bad Apple