C提高 3 字符串与二维指针

二维指针三种内存模型图:

统计字符串两头,非空字符的长度

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
int main()
{
	//统计字符串两头,非空字符的长度
	char *p = "  abc   ";
	int i = 0;
	int j = strlen(p) - 1;
	int count = 0;
	while (isspace(p[i]) && p[i] != ‘\0‘)
	{
		i++;
	}

	while (isspace(p[j]) && p[j] != ‘\0‘)
	{
		j--;
	}
	count = j + 1 - i;
	printf("%d \n",count);

	printf("Hello World!\n");
	system("pause");
}

/*
编译运行:
3
Hello World!
请按任意键继续. . .
*/

//函数封装,统计字符串两头,非空字符的长度

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

//函数封装,统计字符串两头,非空字符的长度
int getstrlen(char *str,int *count)
{
	if (str == NULL || count == NULL)
	{
		return -1;
	}
	char *p =str;
	int i = 0;
	int j = strlen(p) - 1;
	while (isspace(p[i]) && p[i] != ‘\0‘)
	{
		i++;
	}

	while (isspace(p[j]) && p[j] != ‘\0‘)
	{
		j--;
	}
	*count = j + 1 - i;

}

int main()
{
	int count = 0;
	char *s = "   hello   ";
	getstrlen(s,&count);
	printf("%d \n", count);

	system("pause");
}
/*
编译运行: 
5
请按任意键继续. . .
*/

【两头堵模型】

昨天的第一题作业--函数封装,去除一个字符串的首尾空格

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

//函数封装,去除一个字符串的首尾空格
int trimSpace(char *str,char *newstr)
{
	if (str == NULL || newstr == NULL)
	{
		return -1;
	}
	char *p =str;
	int i = 0;
	int j = strlen(p) - 1;
	while (isspace(p[i]) && p[i] != ‘\0‘)
	{
		i++;
	}

	while (isspace(p[j]) && p[j] != ‘\0‘)
	{
		j--;
	} 
	int count = j + 1 - i;

	strncpy(newstr, str+i,count);
	newstr[count] = ‘\0‘;
	return 0;
}

int main()
{
	char newstr[100] ;
	char *str = "   hello   ";
	trimSpace(str,newstr);
	printf("%s", newstr);

	return 0;
}

/*
编译运行:
C:\Users\chunli>gcc  main.c & a
hello
C:\Users\chunli>
*/

再次优化,不需要另外使用新的数组

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
//函数封装,去除一个字符串的首尾空格
int trimSpace(char *str)
{
	if (str == NULL )
	{
		return -1;
	}
	char *p =str;
	int i = 0;
	int j = strlen(p) - 1;
	while (isspace(p[i]) && p[i] != ‘\0‘)
	{
		i++;
	}
	while (isspace(p[j]) && p[j] != ‘\0‘)
	{
		j--;
	} 
	int count = j + 1 - i;
	strncpy(str, str+i,count);//必须是地址
	str[count] = ‘\0‘;
	return 0;
}

int main()
{
	char str[100] = "   hello   ";
	trimSpace(str);//不能使用常量区的内存
	printf("%s<--end", str);

	return 0;
}

/*
编译运行:
C:\Users\chunli>gcc   -o myfun main.c & myfun
hello<--end
C:\Users\chunli>
*/

字符串翻转模型:

1,两头堵模型,字符串翻转:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	int ret = 0;
	char s[100] = "hello world!";
	char *p1 = s;
	char *p2 = s+strlen(s)-1;
	while(p1 < p2 )
	{
			*p1 = *p1 ^ *p2;
			*p2 = *p1 ^ *p2;
			*p1 = *p1 ^ *p2;
			p1++;
			p2--;
	}
	printf("%s<--end",s);
	return ret;
}
/*
编译运行:
C:\Users\chunli>gcc   -o myfun main.c & myfun
!dlrow olleh<--end
C:\Users\chunli>

*/

2, 两头堵模型,字符串翻转,函数封装

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int inverse(char *s)
{
	if(s == NULL)
	{
		return -1;
	}
	char *p1 = s;
	char *p2 = s+strlen(s)-1;
	while(p1 < p2 )
	{
			*p1 = *p1 ^ *p2;
			*p2 = *p1 ^ *p2;
			*p1 = *p1 ^ *p2;
			p1++;
			p2--;
	}

}

int main()
{
	int ret = 0;
	char s[100] = "hello world!";
	inverse(s);
	printf("%s<--end",s);
	return ret;
}
/*
编译运行:
C:\Users\chunli>gcc   -o myfun main.c & myfun
!dlrow olleh<--end
C:\Users\chunli>
*/

3, 字符串翻转,递归---全局变量

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char g_buf[1024]={0};
int inverse(char *s)
{
	static char buf[200];
	int i = 0;
	if(s == NULL)  return -1;
	if(*s == ‘\0‘)  return 0;
	inverse(s+1);
	strncat(g_buf,s,1);
}

int main()
{
	int ret = 0;
	char s[100] = "hello world!";
	inverse(s);
	printf("%s \n",g_buf);
	return ret;
}
/*
编译运行:

C:\Users\chunli>gcc   -o myfun main.c & myfun
!dlrow olleh
*/

4, 字符串翻转,递归---非全局变量

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int inverse(char *s,char *to)
{
	static char buf[200];
	int i = 0;
	if(s == NULL || to == NULL)  return -1;
	if(*s == ‘\0‘)  return 0;
	inverse(s+1,to);
	strncat(to,s,1);
}

int main()
{
	char g_buf[1024]={0};
	int ret = 0;
	char s[100] = "hello world!";
	inverse(s,g_buf);
	printf("%s \n",g_buf);
	return ret;
}
/*
编译运行:

C:\Users\chunli>gcc   -o myfun main.c & myfun
!dlrow olleh
*/

函数的集成:

昨天的第三题作业:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int trimSpace(char *str,char *newstr)
{
	if (str == NULL || newstr == NULL)
	{
		return -1;
	}
	char *p =str;
	int i = 0;
	int j = strlen(p) - 1;
	while (isspace(p[i]) && p[i] != ‘\0‘)
	{
		i++;
	}

	while (isspace(p[j]) && p[j] != ‘\0‘)
	{
		j--;
	} 
	int count = j + 1 - i;

	strncpy(newstr, str+i,count);
	newstr[count] = ‘\0‘;
	return 0;
}

int get_Valude_By_Key(char *Key_And_Value,char *Key,char *Value)
{
	if(Key_And_Value == NULL ||Key == NULL || Value == NULL ) 
	{
		printf("ERROR FUN  get_Valude_By_Key:"
		"Key_And_Value == NULL ||Key == NULL || Value == NULL");
		return -1;
	}

	int ret = 0;
	char *p = Key_And_Value;
	p = strstr(p,Key);
	if(p == NULL)
	{
		printf("FUN get_Valude_By_Key: strstr(p,Key) == NULL \n");
		return -1;
	}
	p = p + strlen(Key);
	p = strstr(p,"=");
	if(p == NULL)
	{
		printf("FUN get_Valude_By_Key: strstr(p,\"=\") == NULL \n");
		return -1;
	}

	p = p+ strlen("=");
	ret = trimSpace(p,Value);
	if(ret!=0)
	{
		printf("FUN get_Valude_By_Key: trimSpace(p,Value) != 0 \n");
		return -2;
	}
	return 0;
}

int main()
{
	int ret = 0;
	char *Key_value = "  id=666  =  value=hahaha   ";
	char *key =  "id=666";
	char value[100]={0};
	ret = get_Valude_By_Key(Key_value,key,value);
	printf("[%s]\n",value);
	return ret;
}
/*
编译运行:
C:\Users\chunli>gcc main.c & a
[value=hahaha]

*/

C Const 指针 与变量:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void fun1(const char *p)//指针所指向的内存空间不能修改
{
	printf("%s",p); //指针所指向的内存空间可以读取
	p = (char *)0x99;//指针的本身的值可以修改
//	p[1]   = 1;//指针所指向的内存空间不能修改
//	*(p+1) = 1;//指针所指向的内存空间不能修改
}

void fun2(char  *const p)//指针的本身的值不可以修改
{
//	p = (char *)0x99;//指针的本身的值不可以修改
	p[1]   = ‘A‘;//指针所指向的内存空间可以修改
	*(p+1) = ‘A‘;//指针所指向的内存空间可以修改
	printf("%s",p);//指针所指向的内存空间可以读取
}

void fun3(const char  *const p)//只能读这个指针
{
//	p = (char *)0x99;//指针的本身的值不可以修改
//	p[1]   = ‘A‘;//指针所指向的内存空间不可以修改
//	*(p+1) = ‘A‘;//指针所指向的内存空间不可以修改
	printf("%s",p);//指针所指向的内存空间可以读取
}

int main()
{
	char p[] = "Hello World!\n";//定义一个普通指针
	fun1(p);
	fun2(p);
	fun3(p);

	const int a = 10;
	int const b = 11;

//	a= 11;   编译不通过
//	int *p2 = &a; //编译这个不通过
//	int *p3 = &b; //编译这个不通过

	return 0;
}
/*
编译运行:
C:\Users\chunli>gcc main.c & a
Hello World!
HAllo World!
HAllo World!
*/

指针做输出模型,被调函数分配内存

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int fun1(char **myp1,int *mylen1,char **myp2,int *mylen2)
{
	char *tmp1 = NULL;
	tmp1  = (char *)malloc(100);
	if(tmp1 == NULL)
	{
		printf("ERROR in tmp  = (char *)malloc(100); \n");
		return -1;

	}
	strcpy(tmp1,"Hello ");
	*mylen1 = strlen(tmp1);
	*myp1 = tmp1;

	char *tmp2 = NULL;
	tmp2  = (char *)malloc(100);
	if(tmp2 == NULL)
	{
		printf("ERROR in tmp2  = (char *)malloc(100); \n");
		return -2;

	}
	strcpy(tmp2,"World !");
	*mylen2 = strlen(tmp2);
	*myp2 = tmp2;
	return 0;
}

int my_free(char **p)
{
	if(p == NULL)
	{
		printf("ERROR in my_free  p == NULL \n");
		return -1;
	}

//方法1
/*
	*p 是一级指针的地址
	**p ,*(*p)就是取二级指针所指向的值

	free(*p);//释放完指针变量所指向的内存空间
	*p = NULL;//把实参改成NULL
*/

//方法2
	char *tmp = NULL;
	tmp  = *p;
	free(tmp);
	tmp = NULL;

}
int main()
{
	int ret = 0;
	char *p1 = NULL;
	char *p2 = NULL;
	int len1 = 0;
	int len2 = 0;
	ret = fun1(&p1,&len1,&p2,&len2);
	if(ret != 0)
	{
		printf("ERROR in fun1 :%d \n",ret);
		return ret;
	}
	printf("[1]%s,%d\n",p1,len1);
	printf("[2]%s,%d\n",p2,len2);
	my_free(&p1);//p1所指向的内存释放了,但是p1没有改成NULL,有野指针现象
	my_free(&p2);

	return 0;
}
/*
编译运行:
C:\Users\chunli>gcc main.c & a
[1]Hello ,6
[2]World !,7

*/

//二级指针三种模型

// 第一种输入,内存模型

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//二级指针三种模型
// 第一种输入,内存模型

//遍历二级指针
void print_arr(char **array,int num)
{
	int i = 0 ;
	for(i = 0;i<num;i++)
	{
		printf("%s\n",*(array + i ));
	}
}

// 排序
void sort_arr(char **array,int num)
{
	int i = 0;
	int j = 0;
	for(i = 0;i<num;i++)
	{
		for(j=i+1;j<num;j++)
		{
			if(strcmp(array[i],array[j]) < 0)
			{
				char *tmp = array[i];	//	交换指针
				array[i] = array[j];
				array[j]  =tmp;
			}
		}
	}
}

int main()
{
	int i = 0;
	int j = 0;
	int num = 0;
	char *array[] = {"aaaa","abaaa","ac"};//数组的每一个元素都是一个普通指针

	num = sizeof(array)/sizeof(array[0]);
	print_arr(array,num);
	sort_arr(array,num);
	printf("------------------------\n");
	print_arr(array,num);

	return 0;
}
/*
编译运行:

C:\Users\chunli>gcc main.c & a
aaaa
abaaa
ac
------------------------
ac
abaaa
aaaa

*/

//二级指针三种模型

//第2种内存模型,注意本次指针的步长是30个char

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//二级指针三种模型
//第2种内存模型,注意本次指针的步长是30个char
int main()
{
	char myBuf[30];
	char array[10][30] = {"aa","ab","ac"};

	int i = 0;
	int j = 0;
	int num  =4;

	for(i = 0;i<num;i++)
	{
		printf("%s\n",array[i]);
	}	

	for(i= 0;i<num;i++)
	{
		for(j=i+1;j<num;j++)
		{
			if(strcmp(array[i],array[j]) < 0)
			{
				char tmp[30];
				strcpy(tmp,array[i]);	// 内存块交换
				strcpy(array[i],array[j]);
				strcpy(array[j],tmp);
			}
		}
	}

	for(i = 0;i<num;i++)
	{
		printf("%s\n",array[i]);
	}

	return 0;
}
/*
编译运行:

C:\Users\chunli>gcc main.c & a
aaaa
abaaa
ac
------------------------
ac
abaaa
aaaa

*/

二级指针三种模型--第3种内存模型

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//二级指针三种模型
//第3种内存模型,
int main()
{

	 char **p = NULL;
	 int num = 5;
	 int i = 0;
	 int j = 0;
	 //在堆中申请一片空间,能装num个char 类型的指针
	 p = malloc(sizeof(char *) * num);
	 
	//在这num个指针,每个都指向不同的内存块 
	for(i = 0;i<num;i++)
	{
		p[i] = malloc(sizeof(char) * 100);
		sprintf(p[i],"%d,%d,%d",i,i+10,i*i);
	}

	//遍历
	printf("-----------------------\n");
	for(i = 0;i<num;i++)
	{
		printf("%s \n",p[i]);
	}

	//指针交换
	for(i = 0;i<num;i++)
	{
		for(j=i+1;j<num;j++)
		{
			if(strcmp(p[i],p[j])<0)
			{
				char * tmp = p[i];
				p[i] = p[j];
				p[j] = tmp;
			}
		}
	}

	//遍历
	printf("-----------------------\n");
	for(i = 0;i<num;i++)
	{
		printf("%s \n",p[i]);
	}

	//内存数据交换
	for(i = 0;i<num;i++)
	{
		for(j=i+1;j<num;j++)
		{
			if(strcmp(p[i],p[j])> 0)
			{
				char tmp[100] ;
				strcpy(tmp,p[i]);
				strcpy(p[i],p[j]);
				strcpy(p[j],tmp);
			}
		}
	}

	//遍历
	printf("-----------------------\n");
	for(i = 0;i<num;i++)
	{
		printf("%s \n",p[i]);
	}

	for(i = 0;i<num;i++)
	{
		if(p[i] != NULL)
		{
			free(p[i]);
			p[i] = NULL;
		}
	}

	return 0;
}
/*
编译运行:
C:\Users\chunli>gcc main.c & a
-----------------------
0,10,0
1,11,1
2,12,4
3,13,9
4,14,16
-----------------------
4,14,16
3,13,9
2,12,4
1,11,1
0,10,0
-----------------------
0,10,0
1,11,1
2,12,4
3,13,9
*/

//二级指针三种模型

//二维指针输入  输出

//第3种内存模型,堆中开辟,我们自己定义的数组,不需要编译在栈中为我们那样开辟

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//二级指针三种模型
//二维指针输入  输出
//第3种内存模型,堆中开辟,我们自己定义的数组,不需要编译在栈中为我们那样开辟

char **getmem(num)
{
	int i =0;
	char **p = NULL;
	//在堆中申请一片空间,能装num个char* 类型的指针
	p = (char **)malloc(sizeof(char *) * num);
	if(p == NULL)
	{
		return NULL;
	}
	//在这num个指针,每个都指向不同的内存块 
	for(i = 0;i<num;i++)
	{
		p[i] = malloc(sizeof(char) * 100);
		sprintf(p[i],"%d,%d,%d",i,i+10,i*i);
	}
	return p;
}

void print_arr(char **p,int num)
{
	int i = 0;
	for(i = 0;i<num;i++)
	{
		printf("%s \n",p[i]);
	}
}

void sort_arr1(char **p,int num)
{
	int i = 0;
	int j = 0;
	//指针交换
	for(i = 0;i<num;i++)
	{
		for(j=i+1;j<num;j++)
		{
			if(strcmp(p[i],p[j])<0)
			{
				char * tmp = p[i];
				p[i] = p[j];
				p[j] = tmp;
			}
		}
	}
}

void sort_arr2(char **p,int num)
{
	int i = 0;
	int j = 0;
	//内存数据交换
	for(i = 0;i<num;i++)
	{
		for(j=i+1;j<num;j++)
		{
			if(strcmp(p[i],p[j])> 0)
			{
				char tmp[100] ;
				strcpy(tmp,p[i]);
				strcpy(p[i],p[j]);
				strcpy(p[j],tmp);
			}
		}
	}
}

void free_arr(char **p,int num)
{
	int i =0;
	for(i = 0;i<num;i++)
	{
		if(p[i] != NULL)
		{
			free(p[i]);
			p[i] = NULL;
		}
	}
}

int main()
{
	char **p = NULL;
	int num = 5;
	int i = 0;
	int j = 0;
	p = getmem(num);
	printf("--------\n");
	print_arr(p,num);
	sort_arr1(p,num);
	printf("--------\n");
	print_arr(p,num);
	sort_arr2(p,num);
	printf("--------\n");
	print_arr(p,num);
	free_arr(p,num);
	if(p != NULL)
	{
		free(p);
		p = NULL;
	}

	return 0;
}
/*
编译运行:
C:\Users\chunli>gcc main.c & a
--------
0,10,0
1,11,1
2,12,4
3,13,9
4,14,16
--------
4,14,16
3,13,9
2,12,4
1,11,1
0,10,0
--------
0,10,0
1,11,1
2,12,4
3,13,9
4,14,16
*/

//玩转多级指针

//玩转多级指针
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//玩转多级指针

int getmem(char ***p,int num)
{
	int i =0;

	if(p == NULL)//里面应该是实参的取地址
	{
		return -1;
	}

	char **tmp = (char **)malloc(sizeof(char *) * num);
	if(tmp == NULL)
	{
		return -1;
	}

	for(i = 0;i<num;i++)
	{
		tmp[i] = malloc(sizeof(char) * 100);
		sprintf(tmp[i],"%d -> %d -> %d",i,i+10,i*i);
	}
	*p = tmp;
}

int freemem(char ***p,int num)
{
	if(p == NULL )
	{
		return -1;
	}
	char **tmp = NULL;
	tmp = *p;
	int i;
	for(i = 0;i<num;i++)
	{
		if(tmp[i] != NULL)
		{
			free(tmp[i]);
			tmp[i] = NULL;
		}
	}
	free(tmp);
	*p = NULL;

}

int print_arr(char ***p,int num)
{
	if(p == NULL)
	{

		printf("2 Hello \n");
		return -1;
	}
	int i;
	for(i =0;i<num;i++)
	{
		printf("%s \n",*(*(p)+i));
	}
}

int main()
{
	char **p = NULL;
	int num = 5;
	getmem(&p,num);
	print_arr(&p,num);
	freemem(&p,num);

 
	return 0;
}
/*
编译运行:
C:\Users\chunli>gcc main.c & a
0 -> 10 -> 0
1 -> 11 -> 1
2 -> 12 -> 4
3 -> 13 -> 9
4 -> 14 -> 16
*/

作业题:

时间: 2024-10-06 10:01:20

C提高 3 字符串与二维指针的相关文章

用字符串生成二维码

需要导入Zxing.jar包 import android.graphics.Bitmap; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; public class ZxingCode { /** * 用字符串生成二

二维数组及二维指针的传递及一些思考

二维数组和二位指针在程序知识中是一个难点,往往会将人弄得头昏眼花.总结一下这个难点的相关问题. 二维数组,顾名思义就是数组的数组:二维指针是指针的指针.首先,我们来看看二维数组和二维指针等价的问题. 在<C专家编程>10.3节的小启发里讲的很透彻:(以下这段文字及对比一定要认真分析!) 数组和指针参数是如何被编译器修改的? "数组名被改写成一个指针参数"规则并不是递归定义的.数组的数组会被改写成"数组的指针",而不是"指针的指针":

OpenCV中Mat,图像二维指针和CxImage类的转换

在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转换和相应的对应关系. 一.OpenCV的Mat类到图像二值指针的转换 以下为函数代码: unsigned char** MatTopImgData(Mat img) { //获取图像参数 int row = img.rows; int col = img.cols; int band = img.c

C++实现离散余弦变换(参数为二维指针)

http://www.cnblogs.com/scut-linmaojiang/p/5013590.html 写在前面 到目前为止已经阅读了相当一部分的网格水印等方面的论文了,但是论文的实现进度还没有更上,这个月准备挑选一些较为经典的论文,将其中的算法实现.在实现论文的过程中,发现论文中有用到一些空域转频率域的算法.因此也就想到了实现一下离散余弦变换.虽然本文的代码和网上很多已有的代码很类似,思路都没有太多的差别,但是本文有一个比较重要的改进.具体的说,网上现有DCT算法输入的是一个固定的二维数

【C语言】二维指针做形参

转自:http://hi.baidu.com/gpmzccqceabimqq/item/f499f057aa1520404eff208b 关键: 传入时强制类型转换 + 使用时自己手工寻址 今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不至于再在这上面浪费时间. 正文: 首先,我引用了谭浩强先生编著的<C程序设计>上面的一节原文,它简要介绍了如

支付宝小程序开发——根据字符串生成二维码

支付宝小程序开发中,如果需要根据字符串生成二维码,那么可以直接使用qrcode插件,你无需引用js,直接使用开发者工具的npm功能就可以了. 一. 安装插件: 1.开发者工具左侧工具栏点击如图所示的图标(npm): 2.NPM包管理界面,输入框中输入 qrcode 并按回车键,等待插件安装完成: 二. 引用并使用插件: 1 //引用插件 2 const QRCode = require('qrcode'); 3 Page({ 4 data: { 5 imgSrc: '' 6 }, 7 onRea

关于数组以为指针二维指针的应用举例

事实上,计算机系统的多维数组其实最终还是以一维数组的形式实现的.就N x M的二维数组来讲,设其数组名为array.指针array指向一个数组,该数组存放的是一系列指针,这些指针分别指向相应的一维数组,而这些数组中存放的才是我们的数据. 由此array 是第i个指针变量地址,array[j]则表示相对于第i个指针变量偏移j*sizeof(数组类型).系统通过这种机制访问了该二维数组的第i行,第j列的内容.有上述可知,指向二维数组的指针其实是指向“指针变量地址”的指针变量.所以在声明指向二维数组的

指针的指针,指针的引用(不是二维指针)

详解c++指针的指针和指针的引用 展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它.(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递. 如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来 的值.我们用下边的代码说明一下问题: int m_value = 1; void func(int *p) {

字符串分割+二维数组 Day15练习

package com.sxt.arrays.test; import java.util.Arrays; /* 1,2,3,4!5,6,7!8,9!12,456,90!32 * 将此字符串以叹号为分割存入二维数组中 * 知识点:字符串+数组 */ public class TestArray { public static void main(String[] args) { String s = "1,2,3,4!5,6,7!8,9!12,456,90!32"; String[]