今天测试代码过程中无意间发现,代码如下:  

  #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 2 int main(int argc, char **argv)
{
char *s1 = "Hello, ";
char *s2 = "world!";
char *s3 = (char*)malloc(SIZE * sizeof(char)); printf("s1: %s\n", s1);
printf("s2: %s\n", s2);
strcpy(s3, s1);
strcat(s3, s2);
printf("s1: %s\n", s1);
printf("s2: %s\n", s2);
printf("s3: %s\n", s3); return ;
}

  代码很简单,就是测试字符串的复制和连接,但是,无论第4行的代码中SIZE是多大,都可以出现如下结果:

s1: Hello,
s2: world!
s1: Hello,
s2: world!
s3: Hello, world!

  感觉结果有点诡异,不是应该对指针的大小有要求的吗,怎么把指针外的东西也能输出呢。

  以后分配内存就可以更加简单了,不需要设置大小了,自动识别大小的内存分配,代码如下:

  

  #include <stdio.h>
#include <string.h>
#include <stdlib.h> void getName(char *name){
printf("the name: %s\n", name); return;
} char* setName(){
char *name = (char*)malloc(sizeof(char));
printf("please input your name: ");
scanf("%s", name); return name;
} int main(int argc, char **argv)
{
char *name = NULL;
name = setName();
getName(name); return ;
}

  代码结果为:

please input your name: zhangsan
the name: zhangsan

  通过中间变量name指针,简单实现了java语言中的setter和getter,只不过是实现的思路稍微有点点变化而已。

  代码如下:  

  #include <stdio.h>

  int main(int argc, char **argv)
{
char cArray[] = "Hello, JJu!";
//char cArray[20];
//cArray = "Hello, JJu!";
char *ptrArray= "Hello, World!";
9   //*(ptrArray + 4) = 'e';
printf("cArray: %s\n", cArray);
printf("*ptrArray: %s\n", ptrArray);
printf("char size: %d\n", sizeof(char));
printf("'a' size: %d\n", sizeof('a')); return ;
}

  这段代码有两怪:

  1、很多人看到这段代码的第一感觉就是第5行与第6行和第7行的效果是一样的,你确定吗,不信运行下就知道了,是不一样的。

  2、第12行的代码的结果是1, 第13行代码的结果是4,a是char,但是char不是a呀;

  3、第9行代码,如果不注释掉,程序就不能编译通过,说明数组无论是用数组本身表示,还是使用指针表示都是不能更改的;

最新文章

  1. C#之发送邮件【模板】+【封装】ZJ版
  2. 【技巧】为ComboBox添加自动提示
  3. PhpStorm设置编码
  4. Android 自定义波浪动画 --&quot;让进度浪起来~&quot;
  5. C语言。自定义函数简单版
  6. Java 编辑tips
  7. Ajax发送POST请求的心路历程
  8. Bootstrap介绍以及配置
  9. SQL存储过程基于字段名传入的字符串拼接.
  10. 理解class.forName()(转)
  11. iOS 开发小技巧
  12. LigerUI权限系统之菜单管理
  13. Geth控制台使用及Web3.js使用实战
  14. 代码块事务—TransactionScope
  15. 浅谈websocket和c# socket(新手篇)
  16. ubuntu 14.04 上配置vlc组播源
  17. 最小生成树&amp;&amp;最大生成树模板
  18. PBN旁切转弯保护区组图
  19. 游程编码(Run Length Code)
  20. Java 如何实现在线预览文档及修改(文本文件)

热门文章

  1. 15Shell脚本—流程控制
  2. JS处理数据四舍五入,tofixed与round的区别
  3. Pytorch学习(一)—— 自动求导机制
  4. machine_desc
  5. HDU:1251-统计难题(字典树模板,动态建树,静态建树)
  6. jsp页面上传多个name值到后台
  7. windows下创建子进程过程中代码重复执行问题
  8. pycharm下搭建django开发环境
  9. hibernate源码分析1-保存一个对象
  10. Python守护进程、进程互斥锁、进程间通信ICP(Queue队列)、生产者消费者模型