C程序设计
----教学过程篇多维数组与指针用指针可以指向一维数组,同样也可以指向多维数组中的元素
1.二维数组元素的地址可以将二维数组理解为“数组的数组”
例如:
int a[2][3]={(1,2,3),(4,5,6)};
可以理解成为两个一维数组,每个数组由三个元素组成多维数组与指针两个一维数组的起始地址分别是:
第一行元素的起始地址,a[0];
第二行元素的起始地址,a[1];
注意:在二维数组中,a[0],a[1]所表示的并不是一个元素,而是每行的第一个元素的地址多维数组与指针在上述二维数组中,每个元素用指针的表示形式为:
*(a[i]+j);
其中 a[i]表示二维数组第 I行的起始地址
j是二维数组第 j列的偏移,所以 a[i]+j表示的就是元素 a[i][j]的地址,而 *(a[i]+j)
就表示该元素的值多维数组与指针(程序一)
#include <stdio.h>
#include <stdlib.h>
main()
{
int a[3][4],*p,i=1,j;
for(j=0;j<3;j++)
{
for(p=a[j];p<a[j]+4;p++,i++)
{
*p = i;
多维数组与指针(程序一)
}
}
for(j=0;j<3;j++)
{
for(p=a[j];p<a[j]+4;p++,i++)
{
printf("%3d",*p);
}
printf("\n");
}
system("pause");}
多维数组与指针多维数组还可以用另外的方法来定义和表示:
如,int a[2][3] = {(1,2,3),(4,5,6)};
int (*p)[3];
它指向包含三个整形元素的一维数组,注意,*p两侧的括号不可以缺少另外,在引用这些数组的时候,一般用 *( *(p+i)+j),不能够写成 *
(( p+i) +j)
多维数组与指针其中 *(*(p+i)+j)表示的是第 I行第 j列的元素的值。
如果写成了 *(( p+i) +j) 则表示第
( I+j) 行的第一个元素的地址以上两种写法得到的结果截然不同,
因此使用时要注意字符串和指针字符串的表示形式:
1.用字符数组存放一个字符串,然后输出该字符串
2.用字符指针指向一个字符串采用此方法时无须定义字符数组,可以直接定义字符指针指向字符串中的字符字符串和指针字符指针指向一个字符串的定义方法:
char * string =,hello China!”
注意:
在上述定义中,它等价于
char *string;
string =,hello China!”
是将字符串,hello China”的首地址赋值给指针变量 string,而非将该字符串每个元素赋值给 string( string不是字符串数组 )
字符串和指针
#include <stdio.h>
#include <stdlib.h>
main()
{
char *str1="hello China!";
printf("%s\n",str1);
system("pause");
}
字符串和指针 (程序一 )
通过指针指向字符数组,进行字符串复制
#include <stdio.h>
#include <stdlib.h>
main()
{
char a[20],b[20];
char *p1,*p2;
p1=a;
p2=b;
printf("please input a string:\n");
gets(a);
字符串和指针 (程序一 )
for(;*p1!='\0';p1++,p2++)
{
*p2=*p1;
}
*p2='\0';
p2=b;
printf("b字符数组的输出结果为,\n");
printf("%s \n",p2);
字符串和指针 (程序一 )
/*while(*p2!='\0')
{
printf("%c",*p2);
p2++;
}
*/
system("pause");
}
字符串和指针 (程序二 )
利用指针实现两个字符串的连接
#include <stdlib.h>
#include <stdio.h>
main()
{
char *p1,*p2,a[20],b[20],c[20];
printf("请输入两个要合并的字符串,\n");
gets(a);
gets(b);
p1=a;
字符串和指针 (程序二 )
p2=c;
for(;*p1!='\0';p1++,p2++)
{
*p2=*p1;
}
for(p1=b;*p1!='\0';p1++,p2++)
{
*p2=*p1;
}
*p2='\0';
字符串和指针 (程序二 )
p2=c;
printf("合并后的字符串为,%s\n",p2);
system("pause");
}
字符串和指针
用字符串指针作为函数的参数将一个字符串从一个函数传递到另一个函数,可以用地址传递的办法(填入字符数组名),也可以用指向字符的指针变量做参数例如:
void fuzhi(char str1[],char str2[])
void fuzhi(char *p1,char *p2)
字符串和指针通过字符指针传递参数实现字符串复制
#include <stdio.h>
#include <stdlib.h>
void fuzhi(char *p1,char *p2)
{
for(;*p1!='\0';p1++,p2++)
{
*p2=*p1;
}
*p2='\0';
}
字符串和指针
main()
{
char *p1,*p2;
char a[20],b[20];
printf("please input 1 string:\n");
gets(a);
p1=a;
p2=b;
fuzhi(p1,p2);
printf("复制后的内容为,\n%s\n",b);
system("pause");}