K&R的名著:小程序总结6

1、指向数组的指针与指针数组
int (*p)[10];
 // 指向数组的指针:p是一个指针,p指向一个由10个元素组成的数组
int *p[10]

// p先与[]结合,表示p是个数组,这个数组的每一个元素都是int*的指针。

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

void main(void)
{
	void sort(char (*p)[6]);

	int i;
	char str[10][6];
	char (*p)[6];
	printf("input 10 strings:\n");
	for (i = 0; i < 10; ++i)
		scanf("%s",str[i]);
	p = str;
	sort(p);
	printf("Now, the sequence is :\n");
	for (i = 0; i < 10; ++i)
		printf("%s\n",str[i]);
	
}

void sort(char (*s)[6])
{
	int i, j;
	char temp[6],*t=temp;
	for (i = 0; i < 9; i++)
		for (j = 0; j < 9 - i; ++j)
			if (strcmp(s[j],s[j+1]) > 0)
			{
				strcpy(t,s[j]);
				strcpy(s[j],s[j+1]);
				strcpy(s[j+1],t);
			}
}


 

 


2、NULL与0 、\0 的区别
NULL和0的值都是一样的,但是为了目的和用途及容易识别的原因,NULL用于指针和对象,0用于数值对于字符串的结尾,使用'\0',它的值也是0,但是让人一看就知道这是字符串的结尾,不是指针,也不是普通的数值。
3、argv[ ]参数
传递main()函数两个参数: argc和 argv。
main(int argc, char *argv[])
 argc:  整数, 为传给main()的命令行参数个数。  argv:  字符串数组。 argv[0]为空串("") ;argv[1] 为在DOS命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
 *++argv是一个指向参数字符串的指针;
(*++argv)[0]是它的第一个字符;而*++argv[0]表示指向一个特定字符串的某个字符
4、*p++与*++p
*p++;   //因为++与*的优先级相同,遵循右结合方式,即*(p++),但返回值认识*p;
*++p;  //*(++p) 很明显

你可能感兴趣的:(c,dos,null,语言)