C编程 知识点 小记

来源:互联网 发布:php数组中删除指定元素 编辑:程序博客网 时间:2024/05/21 11:24

学习使用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"};
warning C4047: 'initializing' : 'char (*)[2]' differs in levels of indirection from 'char [6]'
error C2078: too many initializers
因为char (*ptr3)[2]实质上是和char (*ptr3)一样的,只是用[2]控制了一下每个指针的字符串的长度。