这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么用到过C,虽然网上这类的文章也有很多,还是决定自己在这做个小总结,也算加深下自己的印象,写了下面的测试程序:
#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型指针,就是可以放任何类型变量的地址。
相关推荐
本文档在某知名网站下载,要么浏览量最多,要么最新,保证精品,至少为你节约3RMB。格式为caj或者kdh需要专业阅读器打开。
C语言用指针将字符串数组位置颠倒,实现ABCDEFGHIJKLMNOPQRSTUVWXYZ转换成ZYXWVUTSRQPONNOPQRSTUVWXYZ
C语言中的字符串数组和字符串指针.pdf
C语言程序设计数组指针与字符串PPT课件.pptx
C语言程序设计数组指针与字符串PPT学习教案.pptx
C语言程序设计数组字符串指针实用教案.ppt
C语言程序设计数组字符串指针PPT课件.pptx
C语言程序设计数组字符串指针PPT学习教案.pptx
9.1 1分钟彻底理解指针的概念 9.2 大话C语言指针变量 9.3 C语言指针变量的运算 9.4 数组指针(指向数组的指针) 9.5 字符串指针(指向字符串的
数组例程详解 指针例程详解 字符串例程详解 PPT详细描述数组、指针和字符串在C程序中的应用
C语言第讲指针与字符串字符数组PPT课件.pptx
如何在C语言中处理“字符串”,请善用指针、数组。
嵌入式系统开发人员C语言测试题-数组 指针 字符串
笔记中总结了学习C语言过程中需要掌握的基础知识,包括基本数据类型,数组,字符数组,指针等。对于常见的C语言问题,例如冒泡排序,简单选择排序,斐波那契数列,杨辉三角等都做了系统的梳理。针对函数,关于参数中...
C语言第讲指针与字符串字符数组PPT学习教案.pptx
C语言程序设计实验答案数组指针与字符串.doc
第8章 指针——字符数组与字符指针:字符串的输入和输出C语言程序设计第8章 指针{}一般不用字符串长度控制,如i逐个字符输入输出字符串C语言程序
用字符串常量为字符指针初始化,其形式与字符数组的初始化类似,却有本质上的区别:字符数组获得字符串所有的字符,而字符指针获得字符串首地址,与字符串内的字符无关。 【例8.4】用指向字符串的指针变量完成两个...
C语言训练程序_统计字符串中ASII值为偶数奇数的个数
C语言中,二维数组的参数传递。 例如: char str[5][100]; 如果作为参数传递,内有详细示例。 三种传参示例供参考。