学习使用C语言也N年了,但是发现却总有一些小地方还是会忘记....就随手记记吧!
2012.12.26
#include <stdio.h> void main(void) { char ptr1[] = "pear"; //字符串数组 char *prt2 = "orange"; //定义一个指针,指向字符串 char *ptr3[2]={"apple","banner"}; //定义指针数组,分别指向两个不同字符串,算是char *prt2的升级 char (*ptr4)[3]={"Watermelon"}; //定义一个指针指针指向字符串,且每个指针的长度为2个字符,算是char *prt2的升级 printf("ptr1:%s\n",ptr1); //显示ptr1字符串数组 printf("ptr1:%c\n",ptr1[2]); //显示ptr1字符串数组的第三个字符 printf("ptr2:%s\n",prt2); //显示ptr2字符串指针指向的字符串 printf("ptr2:%s\n",prt2+2); //显示(ptr2字符串指针+2)指向的字符串 printf("ptr2:%c\n",*(prt2+2)); //显示(ptr2字符串指针+2)指向的字符 printf("ptr3[0]:%s\n",ptr3[0]); //显示一个字符串只要变量中给与首地址就好了 printf("ptr3[0]:%d\n",ptr3[0]); //这样是显示存字符串的那个地址空间的数值 printf("ptr4:%s\n",ptr4); printf("ptr4[0]:%s\n",ptr4[0]); //显示ptr4从0开始的整个字符串 printf("ptr4[1]:%s\n",ptr4[1]); //显示ptr4从1*3开始的后面的字符串 printf("ptr4[2]:%s\n",ptr4[2]); //显示ptr4从2*3开始的后面的字符串 //下面几行,ptr1[2]是变量,所以可以赋值,*(prt2+2)是字符串常量的一部分,不可赋值。 ptr1[2] = 'd'; printf("ptr1:%c\n",ptr1[2]); //*(prt2+2) = 'd'; //printf("ptr2:%c\n",*(prt2+2)); //char* p是一个指针,根本没分配内存,他指向的"abc123ABC" 是只读的,不能改变,你在下面给他赋值肯定是错的 //而char p[]是一个数组,已经分配内存,是将"abc123ABC" 复制到该内存里面,这个内存是可读写的 //你只要记住,指针是不分配内存的,它指向的是系统的只读的内存,所以只读 //数组是分配内存的,就是将系统的只读的内存里面的值复制到它的内存里面,因此可读写 //显示字符串时用指针,显示字符时要用指针指向的内容 //ptr1是数字名,同时也是指向数组的指针,ptr1[0]是内容,&ptr1[0]是指向ptr1[0]的指针。 }
PS:
char (*ptr3)[2]={"apple","banner"};