C语言二级指针的应用

1.例1:

void ChangeInteg(int* tmp){//int* tmp = &a
//在子函数声明新的局部变量tmp,并让其指向a,即在指针tmp中保存a的地址,改变*tmp就相当于改变a
	*tmp = 20;
}

void ChangeStr(char** tmp){//二级指针(指针的地址)解引用得到一级指针(指针所指的对象)
//指针本身是所指对象的地址,改变*tmp就相当于改变*b
	*tmp = "miss you,miss chen.";
}

int main(){
	int a = 10;//在主函数栈上分配空间存储变量a
	char* b = "love you,miss chen.";//指针b指向只读区的字符串

	ChangeInteg(&a);//将要处理的变量地址作为实参传递给处理函数
	ChangeStr(&b);
	
	printf("a = %d \n",a);
	printf("b = %s \n",b);
}

例2:

int CopyStr(char** mytmp1, int* mytmp1len, char** mytmp2, int* mytmp2len){
	char* buff1 = (char*)malloc(16*sizeof(char));
	char* buff2 = (char*)malloc(16*sizeof(char));

	strcpy(buff1,"Hello motto");
	*mytmp1len = strlen(buff1);
	*mytmp1 = buff1;

	strcpy(buff2,"Harry up.");
	*mytmp2len = strlen(buff2);
	*mytmp2 = buff2;
	
	return 0;
}

int main(){
	char* tmp1 = NULL;
	char* tmp2 = NULL;
	int tmp1len = 0;
	int tmp2len = 0;
	
	CopyStr(&tmp1,&tmp1len,&tmp2,&tmp2len);
	printf("%s %d \n",tmp1,tmp1len);
	printf("%s %d \n",tmp2,tmp2len);

	if(tmp1 != NULL){
		free(tmp1);
		tmp1 = NULL;
	}
		if(tmp2 != NULL){
		free(tmp2);
		tmp2 = NULL;
	}
	return 0;
}

例3:

void CutSpace(char* resc, char* out){
	int j =0;
	int i = 0;
	while(*(resc + i)){
		if(*(resc + i) != ' ')
			out[j++] = *(resc + i);
		i ++;
	}
	out[j] = '\0';
	return;
}

void PrintStr(char* instr, char* outstr, int num){
	int i = 0;
	for(; i < num; i++){
		outstr[i] = instr[i];
	}
	outstr[num] = '\0';
	return;
}

int GetKeyValue(char* myresc, char** mykey, char** myvalue, int* mylen){
	int left = 0;
	char* tmprese = myresc;
	char* tmpvalue = NULL;
	char* out = (char*)malloc(16);
	char* str= (char*)malloc(16);

	CutSpace(tmprese, out );
	tmpvalue = strrchr(out, '=');
	*myvalue = tmpvalue + 1;

	*mylen = strlen(*myvalue);
	left = strlen(out) - *mylen -1;
	PrintStr(out, str, left);
	*mykey = str;
	
	return 0;
}

int main(){
	char* resouce = "   key1  =    1990/07/14  ";
	char* keystr = NULL;
	char* valuestr= NULL;
    int lenght = 0;

	GetKeyValue(resouce, &keystr, &valuestr, &lenght);
	printf("keystr = \"%s\" \nvaluestr = \"%s\" \nlenght = %d\n",keystr ,valuestr,lenght );

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值