C 数组作为参数
#include<stdio.h> #include<string.h> #include <malloc.h> void f1(char s[], int n); void f2(char *s); void f3(char s[20][20]); //这里的大小要和实参中数组大小匹配 否则可能不会得到理想值 void f4(char **str); void f5(char * str[]); void main() { int i, n; char str[20][20] = { { "Adam" }, { "Bob" }, { "Dimen" }, { "Colin" }, { "Correal" }, { "Sick" }, { "Rachel" } }; char * str1[20]= { { "Adam" }, { "Bobs" }, { "Dimen" }, { "Colin" }, { "Correal" }, { "Sick" }, { "Rachel" } };//这种是定义字符串数组最好的方式 //以str2作为实参 总是报错 char **str2 = { { "Adam" }, { "Bob" }, { "Dimen" }, { "Colin" }, { "Correal" }, { "Sick" }, { "Rachel" } }; char s1[10] = { "ABCD" }; char *s2={"NMJK"}; f1(s1, 5); f1(s2, 5); f2(s1); f2(s2); f3(str);//传入的实参必须是char a[][] f4(str);//null //f4(str2);//报错 f5(str);//null //f5(str2);//报错 f5(str1);//ok printf(str1); } void f1(char s[], int n) { //虽然声明时用的是char s[] 但实现时char *s也是可以的 //且实参 可以是char s[] 也可以是char *s printf("%s\n", s); } void f2(char s[]) { //很神奇!char *s char s[] 等同效果 printf("%s\n", s); } void f3(char str[20][20]) { printf("%c ,", str[2][2]); //m char (*p)[20] = str; //p指向str中的第一行 printf("%s ,", *(p + 1)); //Bob //char **p=str;//这样定义是错误的 } void f4(char ** str) { printf("\n"); printf("%s ,", *(str + 1)); } void f5(char * str[]){ printf("\n"); printf("%s ,", *(str + 1)); printf("%s ,", *(str + 2)); printf("%c ,", *(*(str)+3));//m printf("%c ,", *(*(str)+4));// '\0' printf("%c ,", *(*(str)+5));//B printf("%c ,", *(*(str)+6));//o printf("%s,",*(str)+1);//dam strcpy(str,"2003");//成功修改 }