p[0]+3*i+j就是说矩阵第i行第j列的那个数字相对于p[2]首元素地址相差多少
另一个同理
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int trimSpace(char *inbuf, char *outbuf)
{
int i = 0;
int j = 0;
int len = 0;
if (inbuf == NULL || outbuf == NULL) {
fprintf(stderr, " (inbuf == NULL || outbuf == NULL)\n ");
return -1;
}
j = strlen(inbuf) - 1;
//左边开始遍历
while (isspace(inbuf[i]) && inbuf[i] != '\0')
i++;
//右边
while (isspace(inbuf[j]) && j > i)
j--;
len = j - i + 1;
strncpy(outbuf, inbuf + i,len);
outbuf[len] = '\0';
return 0;
}
int main(void)
{
char *str = " abcdefgdddd ";
char buf[128] = { 0 };
if (trimSpace(str, buf) < 0)
return -1;
printf("buf: [%s]\n", buf);
return 0;
}
int *p[3]; 定义包含3个元素的指针数组。
p[0] = a[0]; 是将p[0] 指向数组 a[2][3] 的首行地址即 a[0], 因为数组是连续的存储空间,所以知道了数组的首地址,首地址 + 偏移量就可以得到数组每个元素的地址,p[0] + 3 * i + j , p[0] 就是 a[][] 的首地址,偏移量 = 某行 i * 固定列数 + 某列数 j ,如计算第0行第2列元素:p[0]+0*3+2 ,可理解为将二维数组转换成一维数组的排列。
p[1] = b[0]; 将 p[1] 指向数组b[3][2];
p[2] = c[0]; 将 p[2] 指向数组c[2][2];