C进阶 函数指针 指针函数 字符串操作

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

//函数指针
#if 0
//void test(char **p){
//
//}
char  *mymalloc(char **p)
{
	static char a[100];
	*p= a;
}
int main(){
	//char arr[] = "darqfafafa";
	/*char *arr[5] = { "ad", "dada", "dasfa", "fasfaq", "daafa" };
	test(arr);
	test(&arr[0]);*/
	char *str = NULL;
	mymalloc(&str);
	strcpy(str, "hollow world");
	puts(str);
	system("pause");
	return 0;
}
#endif
#if 0
int main(){
	char arr[] = { 1, 2, 3, 4, 5, 6 };
	printf("%d\n", strlen(&arr + 1));
	system("pause");
	return 0;
}
#endif
#if 0
int main(){
	int a = 6;
	int *p = &a;
	printf("%p\n", p);
	printf("%p\n", p + 0x1);
	printf("%p\n", (unsigned long)p + 0x1);
	printf("%p\n",(short*)p+0x1);
	printf("%p\n",(double*)p+0x1);
	system("pause");
	return 0;
}
#endif

#if 0
int main(){
	int a[]={1,2,3,4};
	printf("%d\n",sizeof(a));//16
	printf("%d\n",sizeof(a+0));//4
	printf("%d\n",sizeof(*a));//4
	printf("%d\n",sizeof(a+1));//4
	printf("%d\n",sizeof(a[1]));//4
	printf("%d\n",sizeof(&a));//4
	printf("%d\n",sizeof(*&a));//16
	printf("%d\n",sizeof(&a+1));//4
	printf("%d\n",sizeof(&a[0]));//4
	printf("%d\n",sizeof(&a[0]+1));//4
	system("pause");
	return 0;
}
#endif
#if 0
int main(){
	char arr[]={'a','b','c','d','e','f'};
	printf("%d\n",sizeof(arr));
	printf("%d\n",sizeof(arr+0));
	printf("%d\n",sizeof(*arr));
	printf("%d\n",sizeof(arr[1]));
	printf("%d\n",sizeof(&arr));
	printf("%d\n",sizeof(&arr[0]+1));
	system("pause");
	return 0;
}
#endif
#if 0
int main(){
	char *c[]={"ENTER","NEW","POINT","FIRST"};
	char **cp[]={c+3,c+2,c+1,c};
	char ***cpp=cp;
	printf("%s\n",**++cpp);
	printf("%s\n",*--*++cpp+3);
	printf("%s\n",*cpp[-2]+3);
	printf("%s\n",cpp[-1][-1]+1);
	system("pause");
	return 0;
}
#endif

#if 0
//字符串操作函数:strlen ......
int main(){
	char a[10] = { 'a', 'b', 'c', 'd', 'e' };//告诉数组的大小之后才能知道长度
	char b[] = { 'a', 'b', 'c', 'd', 'e' };//也就是才能找到/0,/0会补充这个数组没有的部分
	char c[] = "123456";
	char str[] = "abc\012abc";//abc\nabc
	char str1[] = "abc\0abc";//abc0abc
	int n, m, z;
	n = strlen(a);//5
	m=strlen(b);//>5
	z=strlen(c);//6
	printf("%d,%d,%d\n",n,m,z);
	n = strlen (str);//7
	m = strlen(str1);//3
	printf("%d,%d\n", n, m);
	system("pause");
	return 0;
}
#endif

#if 0
//strcpy:把这个字符串的自身的元素和自身的 一个 \0拷贝到第一个参数里面
//char *strcpy(char *dest,const char *source)   链式表达式
int main(){
	char a[20] = "12345678";
	char b[20] = "qwer";
	strcpy(a, b);
	printf("%s\n", a);
	system("pause");
	return 0;
}
#endif

#if 0
//strcat:拼接函数
//char *strcat(char *dest, const char *source)
int main(){
	char a[20] = "12345678";
	char b[20] = "qwer";
	strcat(a, b);
	printf("%s\n", a);
	system("pause");
	return 0;
}
#endif

#if 0
//strcmp:字符串比较大小:按照字符串从首字母开始的ASCII值比较,知道找到不相等的为止
//int strcmp(const char * string1,const char *string2)
int main(){
	char a[20] = "12345678";
	char b[20] = "qwer";
	int n=strcmp(a, b);
	printf("%d\n",n);
	system("pause");
	return 0;
}
#endif

#if 0
//strtok:在字符串中查找标记,并用\0结尾,返回指向这个标记的指针
int main(){
	char str[]="i,am.a student";
	char sep[]=",. ";
	char *tok=NULL;
	for (tok=strtok(str,sep);tok!=NULL;tok=strtok(NULL,sep)){
		puts(tok);
	}
	system("pause");
	return 0;
}
#endif
#if 0
int main(){

	system("pause");
	return 0;
}
#endif

total:数组名的意义:
1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小
2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址
3.除此之外所有的数组名都表示首元素的地址

猜你喜欢

转载自blog.csdn.net/qq_44783220/article/details/90343650