C学习代码

/*
指针相关
*/

//指针变量为函数参数

//指针与一维数组
//数组名为数组元素的首地址,是一个指向数组中第一个元素的 指针常量,可以直接视为一个指针常量来操作

//下标法引用数组
#include <stdio.h>
int main(){
	int a[5],i;
	printf("Input five numbers :");
	for(i=0;i<5;i++){
		scanf("%d",&a[i]);	//此处为地址
	}
	for(i=0;i<5;i++){
		printf("%4d",a[i]);	//此处为数组元素
	}
	printf("\n");
	return 0;
}
//指针常量引用数组1
int main(){
	int a[5],i;
	printf("Input five numbers :");
	for(i=0;i<5;i++){
		scanf("%d",a+i);	//a为指针常量
	}
	for(i=0;i<5;i++){
		printf("%4d",*(a+i));	//a为指针常量
	}
	printf("\n");
	return 0;
}
//指针常量引用数组2
int main(){
	int a[5],*p;
	printf("Input five numbers :");
	for(p=a;p<a+5;p++){
		scanf("%d",p);	//p为指针常量
	}
	for(p=a;p<a+5;p++){
		printf("%4d",*p);	//p为指针常量
	}
	printf("\n");
	return 0;
}
/*以上,p+1与p++的区别,二者都是增1操作,但p+1并不改变指针的指向,即p+1执行后p仍指向数组首地址;
p++执行的是p=p+1,p的指向在不断向前递增
*/
//下标形式的指针
int main(){
	int a[4],*p=NULL,i;
	printf("Input four numbers:");
	p=a;	//指针常量a赋值给指针变量p,tips:a为常量,所以a++错误,p为变量,p++正确
	for(i=0;i<4;i++){
		scanf("%d",&p[i]);	//&p[i]等价与p+i
	}
	for(i=0;i<4;i++){
		printf("%4d",p[i]);	//p[i]等价于*(p+i)
	}
	return 0;

}

/*字符指针
	char *ptr = "Hello";
	char *ktr;
	char str[10] = "Hello";
	ktr = str
	tips:同数组,字符串名代表其首地址的指针常量,所以str的值不可以改变,但是ktr的值可以改变
	因为其是变量
*/
//函数返回字符串指针、字符串指针为参数
/*连接两个字符串,最后返回连接后字符串的地址 */
#include <stdio.h>
#define N 80
char *MyStrcat(char *dstStr,char *srcStr);
int main(){
	char first[2*N];
	char second[N];
	printf("Input the first string:");
	gets(first);	//输入字符串,tab/空格不作为终止
	printf("Input the second string:");
	gets(second);	//输入字符串,tab/空格不作为终止
	printf("The result is:%s\n",MyStrcat(first,second))	//此处first,second数组名为指针指针常量
	return 0;
}
char *MyStrcat(char *dstStr,char *srcStr){
	char *pStr = dstStr;	//保存dstStr字符串的首地址
	while(*dstStr != '\0'){		//*dstStr != '\0'表示未到字符串末,*dstStr为一个值,区别于地址
		dstStr++;
	}
	for(;*srcStr!='\0';dstStr++,srcStr++){
		*dstStr = *srcStr;
	}
	*dstStr = '\0';
	return pStr;
}


猜你喜欢

转载自blog.csdn.net/ivorybeach/article/details/79668261