指针二维数组的应用吧

img


解释一下3i与2j的意思,有点迷,来个好兄弟稍微解释一下,看一下午代码脑子有点晕,可能是个很简单问题,求解

p[0]+3*i+j就是说矩阵第i行第j列的那个数字相对于p[2]首元素地址相差多少
另一个同理


  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7530672
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:输入三个字符串,将字符串1中里的字符串2用字符串3代替
  • 除此之外, 这篇博客: C语言(二)字符数组、字符串、字符指针及字符串常用操作中的 方式2:当字符不为结束符时,i从头扫描,遇空格则i++;j从尾扫描,遇空格则j--。最终确定字符串长度,一次性拷贝(只能删除非空格字符串前和后的空格,不能删除出现在字符串中间的空格)  部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #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];