C编程 知识点 小记

学习使用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]控制了一下每个指针的字符串的长度。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值