写下面的测试程序:

#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语言中字符数组和字符串指针分析相关推荐

  1. 关于C语言中字符数组和字符串的输出

    本文内容仅仅代表个人在学习中遇到的问题并作出的总结,如有错误的地方和别的想法可以联系一起学习讨论! 文章目录 前言 一.字符数组和字符串 二.过程分析 1.字符数组和字符串输出对比 2.字符数组和字符 ...

  2. C语言中字符数组的初始化与赋值,字符串相关函数

    C语言中字符数组的初始化与赋值,字符串相关函数! 1.字符数组初始化 在C语言中,字符串是当做字符数组来处理的:所以字符串有两种声明方式,一种是字符数组,一种是字符指针. (1)直接逐个初始化字符数组 ...

  3. C语言中字符数组的初始化与注意事项

    在C语言中字符数组的初始化有三种常见的方法: char a[5] = {'a','b','c','d','e'};char c[] = {'a','b','c','d','e'};char b[] = ...

  4. C语言关于字符数组接受字符串解析

    C语言关于字符数组接收字符串解析 前言:在一道算法题中遇到了一个让我很诧异的问题,strlen为什么得不到正确的长度.答案是我对字符数组进行的是赋值操作,不会自动补'/0'. 本文从三个角度分析问题, ...

  5. 【示例】C语言中利用数组存放函数指针

    C语言中利用数组存放函数指针,增加函数使用的灵活性.使用时只需提供数组索引,即可调用不同函数. 预备知识: 1.指向函数的指针 一个函数在编译时被分配一个入口地址,这个地址就被称为函数的指针. 例如: ...

  6. php和c语言的字符数组中,字符数组和字符串的区别,C语言字符数组和字符串区别详解...

    C 语言中并不存在字符串这个数据类型,而是使用字符数组来保存字符串.那么,字符数组就一定是字符串吗? 对于这个问题,大多教科书中的回答是"是".其实不然,字符数组和字符串是完全不相 ...

  7. C语言中字符数组初始化的几种方法

    欢迎关注我的微信公众号:CurryCoder的程序人生 1.C语言中的字符数组初始化 在C语言中,字符串是当做字符数组来处理的:所以字符串有两种声明方式,一种是字符数组,一种是字符指针. 1.1 直接 ...

  8. C语言中字符数组的初始化与赋值

    1.字符数组初始化 在C语言中,字符串是当做字符数组来处理的:所以字符串有两种声明方式,一种是字符数组,一种是字符指针. 字符数组初始化 char parr[] = "zifuchuansh ...

  9. C语言的字符数组(字符串)的定义与初始化

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...

最新文章

  1. lzg_ad:使用OPENROWSET函数连接并访问远程数据库数据
  2. vc新线程、类外控制EDIT控件
  3. 用php实现动态产生xml文件以及从xml文件中抽取数据转化成html的
  4. 学不好Web前端的几个原因总结
  5. 关于prefrenceactivity和preferencefragment的作用
  6. 写在前面,白话 Yaf 探秘与深入
  7. MFC中CString转换成char数组的问题
  8. gs算法的matlab代码_【图像算法amp;MATLAB】直方图均衡(干货代码)
  9. VMware虚拟机安装RHEL6.5系统
  10. Linux内核project导论——网络:Netfilter概览
  11. 罚函数(penalty function)的设计
  12. 电脑桌面双击计算机图标打不开,电脑双击图标打不开怎么办
  13. 电脑qq游戏程序更改计算机,电脑怎么把qq游戏快捷到桌面
  14. 输入大小写混合的字母,大写转小写,小写转大写
  15. 华为服务器pe安装系统教程视频教程,华为电脑重装windows7系统的方法
  16. 慕容垂:百万战骨风云里——激荡的鲜卑史略之三(转载)
  17. php 拼音首字母大写字母,获取汉字拼音首字母大写
  18. 基于蒙特卡诺和拉格朗日乘子法的电动车调度【有序、无序充放电】【Matlab代码】
  19. 【Java分享客栈】SpringBoot整合WebSocket+Stomp搭建群聊项目
  20. Tp-link(TL-WR886N)无线路由器后台JS加密算法Python实现

热门文章

  1. .net new一个类为什么报空指针_谈谈.NET对象生命周期
  2. 底部固定菜单_捡起一只妲己团团,附送一个同校固定队友!还有这种好事?
  3. 力扣(LeetCode)刷题,简单+中等题(第26期)
  4. Opencv4.0运行yolov3
  5. android的xml置底_Android布局之xml设置
  6. 强哥原创管理方法论之“粉丝经济管理学”
  7. addEventListener()与removeEventListener()
  8. Blender写实产品创作学习教程
  9. SketchUp Pro 2021基础入门学习视频教程
  10. 3dmax2021入门学习教程