c语⾔字符⼆维数组指针赋值,C语⾔之⼆维数组与指针⼆维数组:
char a[2][3];
⼆维数组实质上也就是⼀维数组,a[2][3]可看做⼀个2个元素的⼀维数组,这2个元素⼜是另⼀个数组,在内存中,它的排布如下:
#include "stdio.h"
int main(int argc, char *argv[])
{char a[2][3]={{1,3,9},{2,4,8}};for(int i=0; i<2;i++)for(int j=0;j <3;j++)
{
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
}for(int i=0; i<2;i++)for(int j=0;j <3;j++)
{
printf("a[%d][%d] Addr=0X%X\n", i, j, (int)&a[i][j]);
}return 0;
}
数组指针:
char a[2][3]={{1,3,9},{2,4,8}};char (*p)[3]=a; //a为⼀维数组的数组名,类型为char (*)[3]
char *p=a[1]; //a[1]为⼆维数组的数组名,即{2,4,8}数组的⾸地址,类型为char *
char (*)p[2][3]=&a //&a为整个数组的⾸地址,类型为char (*)[2][3]
⼆维数组传参:
当定义了char a[2][3]={{1,3,9},{2,4,8}},如何将地址传⼊到函数中呢。函数对a数组进⾏修改呢。
void Func(int (*array)[10]);  注意*array需要⽤括号括起来。
这种形式的传参是1个指针,指向10个元素的数组,因为[]的优先级⽐*的优先级⾼,故*array必须⽤括号括起来。
#include "stdio.h"
void exchange(char (*p)[3]);int main(int argc, char *argv[])
{char a[2][3]={{1,3,9},{2,4,8}};for(int i=0; i<2;i++)for(int j=0;j <3;j++)
{
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
}
printf("exchange\n");
exchange(&a[1]);for(int i=0; i<2;i++)for(int j=0;j <3;j++)
{
c语言二维数组表示方法
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
}return 0;
}void exchange(char (*p)[3])
{char tmp=(*p)[0];
(*p)[0] = (*p)[2];
(*p)[2] =tmp;
}
例⼦解析:exchange(&a[1])将{2,4,8}数组的⾸地址传递给exchange,exchange使⽤(*p)获得{2,4,8}的地址,然后⽤(*p)[0]、(*p) [1]、(*p)[2]偏移并修改{2,4,8}数组的值。
void Func(int *array[10]);
这种形式的传参是10元素的数组,每个元素都是指向int型的指针。
#include "stdio.h"
void exchange(char *p[2]);int main(int argc, char *argv[])
{char a[2][3]={{1,3,9},{2,4,8}};for(int i=0; i<2;i++)for(int j=0;j <3;j++)
{
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
}
printf("exchange\n");char *p[2];
p[0] = a[0];
p[1] = a[1];
exchange(p);for(int i=0; i<2;i++)for(int j=0;j <3;j++)
{
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
}return 0;
}void exchange(char *p[2])
{char tmp=p[1][0];
p[1][0] = p[1][2];
p[1][2] =tmp;
}
例⼦解析:先使⽤char *p[2]定义了2个元素的数组,每个元素都是char *型,然后将a[0]和a[1]的地址赋给p[0]和p[1],exchange函数接收到p[2]的地址,使⽤p[1]就能得到a[1]的地址,然后使⽤p[1][0]、p[1][1]、p[1][2]偏移到a[1][0]、a[1][1]、a[1][2]。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。