一维数组示例
见如下代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void add(char *p, int len){
int i=0;
printf("%c\n", p[len-1]);
printf(“%d\n”, p[len-1]); //由这两行可以看出main函数中的gets()函数在输入字符串的时候会以\0(空字符)结尾
for(i=0; i<len-1; i++){ //所以在这里i可以设置为i<len-1, 因为数组下标是len-1的那个字符就是上面所讲的空字符
printf("%c", p[i]);
}
}
int main(){
char name[10];
gets(name);
int len;
len=strlen(name);
printf("主函数:%s\n", name);
add(&name[0], len);
//由于上面所定义的add(char *p, int l)函数中p为指针,所以在这里要传入数组的地址,而数组的地址只需传入数组的首地址即可,后面可通过add函数中for循环的p[i]来依次输出。(在C语言中用&来取变量地址)
//注意:由于字符串长度有严格限制,所以在这里还需要传入一个int类型的变量len,以便于后续输出;
return 0;
}
二维数组示例
二维数组地址的理解
见如下代码:
#include<stdio.h>
#include<stdlib.h>
int main(){
int i, j;
int chs[2][3]={'I', 'l', 'o', 'v', 'e', 'U'};
for(i=0; i<2; i++){
for(j=0; j<3; j++){
printf("%c ", chs[i][j]);
}
}
printf("\n");
for(i=0; i<2; i++){
for(j=0; j<3; j++){
printf("%p\n", &chs[i][j]); //在这里,我们输出数组中所有元素的地址
}
}
return 0;
}
输出结果如下:
二维数组示例测试
由此我们可以发现二维数组其实就是一维数组的一个简单的变形,所以我们可以用同样的方法来把数组的首地址当作指针,以此来作为函数形参,见如下代码:
#include<stdio.h>
#include<stdlib.h>
int main(){
int i, j;
char add(char *p);
char chs[2][3]={'I', 'l', 'o', 'v', 'e', 'U'};
add(&chs[0][0]);//这里与一维数组不同,需要输入具体的首地址,而将&chs[0][0]替换为&chs,是无法编译的
return 0;
}
char add(char *p){
printf("%c", p[5]);//在这里我们指定输出的是“U”
return 0;
}
输出结果如下:
总结:在最后总结一下以上的内容,二维数组只是一维数组的一个变形,本质是一样的,但在使用的时候会稍微有些不同。比如二维数组作为形参时,要求我们写的更加具体,输入首地址后接下来便和一维数组一样操作。
用法
通过指针我们可以访问内存地址,通过对内存的修改来对数组进行改变,这样就可以解决函数无法返回一个数组的问题,见如下代码:
#include<stdio.h>
#include<stdlib.h>
int main(){
int i, j;
char add(char *p);
char chs[2][3]={'I', 'l', 'o', 'v', 'e', 'U'};
add(&chs[0][0]);
for(i=0; i<2; i++){
for(j=0; j<3; j++){
printf("%c ", chs[i][j]);
}
}
return 0;
}
char add(char *p){
char i;
i=p[5];
p[5]=p[0];
p[0]=i;
return 0;
}
输出结果如下:
本人初次写博客,觉得将注释写在代码内有助于理解,如有不足的地方,请多多指教。