C语言中字符数组和字符串指针分析

原创 2015年07月06日 16:21:37


#include <stdio.h>

int main(int argc, char *argv[])
{

  char day[15] = "abcdefghijklmn";
  char* strTmp = "opqrstuvwxyz";

  printf("&day is %x\n",&day);
  printf("&day[0] is %x\n",&day[0]);
  printf("day is %x\n",day);
  
  printf("\n&strTmp is %x\n",&strTmp);
  printf("&strTmp[0] is %x\n",&strTmp[0]);
  printf("strTmp is %x\n",strTmp);
  
  getchar(); 
  return 0;
}

运行后屏幕上得到如下结果:


其实看到结果估计很多东西就好明白了,

    先看看前三个输出也就是关于变量day的,在 char day[15] = "abcdefghijklmn"; 这个语句执行的时候,系统就分配了一段长15的内存,并把这段内存起名为day,里面的值为"abcdefghijklmn",如下图所示:

        再看程序,第一个输出,&day,&号是地址运算符,也就是day这个变量的内存地址,很明显,在最前面,也就是a字符所在字节的地址;
        对于第二个输出也就好理解了,&day[0],就是day数组中第一个变量(也就是a)的地址,因此他们两个是一样的;
        第三个输出是day,对于数组变量,可以使用变量名来索引变量中的内容,其实这里的day可以理解成数组变量退化的指针,并且指向数组的开头,既然把它理解成指针,那么它的值肯定是地址了,所以他的值和上面两个也一样。

    再看看后面三个输出,关于字符串指针strTmp,在执行char* strTmp = "opqrstuvwxyz";后,内存的图示如下:


如图所示,内存分配了两段内存,一个名为strTmp,类型是一个字符指针,另外一段是一个字符串常量,且strTmp里面存放着字符常量的首地址,注意这里无法通过strTmp修改这段字符串,因为是常量;于是程序中的后面三个输出就好理解了;
    
  &strTmp:strTmp这个字符指针的地址
  &strTmp[0]:strTmp所指字符常量第一个字符的地址
  strTmp:strTmp这个字符指针的值,即字符常量的首地址

因此,最后两个的值是一样的。
      指针可以这样理解,指针这种类型,和int,char,double等等是一样的,只是它用来保存地址值的,而int变量保存整数,char变量保存字符,仅此而已,就char型指针或者int指针,本质是一样的,都是存放的地址,只不过那个地址所里面的变量类型不同而已,还有一种void型指针,就是可以放任何类型变量的地址。

C语言中字符数组和字符串指针分析

本文转载自:http://www.cnblogs.com/gigikouyi/archive/2006/08/01/464737.html测试程序如下:#include int main(int ...

C语言中字符数组和字符串指针分析

本文转载自:http://www.cnblogs.com/gigikouyi/archive/2006/08/01/464737.html 测试环境是win10-64位,编译器是C-free,测试程...

C语言中字符数组和字符串指针分析

C语言中字符数组和字符串指针分析     这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么用到过C,虽然...

C语言中字符数组和字符串指针分析

这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么用到过C,虽然网上这类的文章也有很多,还是决定自己在这做...
  • Andeewu
  • Andeewu
  • 2013年12月13日 10:49
  • 443

C语言中字符数组和字符串指针分析

 这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么用到过C,虽然网上这类的文章也有很多,还是决定自己在这...

C语言中字符数组和字符串指针分析

这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么用到过C,虽然网上这类的文章也有很多,还是决定自己在这做...
  • qmhlan
  • qmhlan
  • 2011年07月29日 17:43
  • 333

C语言字符数组与字符串.ppt

  • 2012年11月27日 22:15
  • 230KB
  • 下载

对C语言中的字符串,字符数组以及用指针表示字符串的理解

C语言中没有字符串类型的变量,想要在C语言中要使用字符串可以用一下几种方式:1、字符数组;2、用指针指向字符串;1、字符数组: a ) char str1[] = "abc"; b ) cha...

11、C语言中字符数组和指针字符串的指针变量

#include #include //通过指针引用字符串,以及字符数组 int main() { //%c(一般的数据类型如:%d) 对应值。 %s 对应字符串首地址。 char...

C语言提高-28讲: 字符串、字符数组、字符指针

知识点总结:        1.字符串与字符数组           用""括起来的部分就是字符串常量(包含'\0')即,字符串是以'\0'为结束标志的字符数组           字符'\0'输出不...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言中字符数组和字符串指针分析
举报原因:
原因补充:

(最多只允许输入30个字)