【C语言day09】

【C语言day09】_第1张图片

#include
int main()
{
	int a[12] = { 1,2,3, 4,5,6,7, 8,9,10,11,12 }, * p[4], i;

	//123
	//456
	//789
	//101112
 
	//for (i = 0; i < 4; i++)
	//	p[i] = &a[i * 3];
	// 0 3 6 9
	// 1 4 7 10

	//printf("%d\n", p[3][2]);
	//printf("%d\n", *(*(p + 3) + 2));

	//for (i = 0; i < 12; i++) {
	//	printf("%p\n", a[i]);
	//}

	return 0;
}

p是一个指针数组,p[i] = &a[i*3]相当于是把数组a每3个一组分开并把每组的首地址存在p数组,此时p类似一个4行3列的二维数组,p[3][2]就是4行第3个元素12(a数组中的元素是连续存储的)


二维数组X按行顺序存储,其中每个元素占1个存储单元。若 X[4][4] 的存储地址为 Oxf8b82140 , X[9][9] 的存储地址为 Oxf8b8221c ,则 X[7][7] 的存储地址为( )

注意:

只是知道44和99的地址,但是我们并不知道每一行有几个元素
所以说假设每一行有n个元素
使用99的地址减去44的地址(16进制数与16进制数相减)借位一次加16
但是在44前面肯定有4行(0-3),在99前面肯定有9行(0-8)
也就是说:44是四行+5个元素(0-4),99是九行+10个元素
相减之后:5行+5个元素
也就是:5*n+5 = 0x21c-0x140(n是每一行的元素个数)注意是16进制数相减,借位/进位要加上16
DC = 5*n+5 DC也就是:D*16+C = 220
//解得n为43
那么77的求法也一样
假设77的地址为X
77前面有(0-6)7行,44前面有(0-3)4行
所以说相减:为3行
77这一行还有(0-7)8个元素,44这一行有(0-4)5个元素
所以说3*n+3 = X-0x140,n为43
X = 0x140+132
132也就是16进制的 0x84
X = 0x140+0x84  = 0x1c4

sizeof是C语言中的一个操作符,不是函数调用,简单的说其作用就是返回一个对象或者类型所占的内存字节数,结果是无符号整数,因此可以把它看作是整型表达式


#include

int main()
{
	char a = 'a', b;
	printf("%c,", ++a);//b
	printf("%c\n", b = a++);//b
	printf("%c\n", a);//c
	return 0;
}

变量a里边存的是字符'a',第一次输出先加加再输出,输出的是'b';
第二次输出的时候,a先赋值再加加,赋值给b的就是a原来的值,输出b的时候的还是'b'

逗号表达式

(x= 4 * 5 , x * 5) , x + 5;
//X = 20
//25

逗号表达式是从前到后依次计算子表达式,而其结果是最后一项的值,此题去掉括号后的表达式,和原表达式是等价的,先计算45并赋值给x,x变为20,中间x5并没有改变x的值,最后一项x+5值是25,也就是整个表达式的值


自除数
题目来源
自除数 是指可以被它包含的每一位数整除的数。

自除数 不允许包含 0 。

给定两个整数 left 和 right ,返回一个列表,列表的元素是范围 [left, right] 内所有的 自除数 。

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* selfDividingNumbers(int left, int right, int* returnSize){
    int* arr = (int*)malloc((right-left)*sizeof(int));
    int i = 0;
    *returnSize = 0;
    for(i=left;i<=right;i++){
      int key = i;
      while(key!=0){
        int temp = (key%10);
        if(temp == 0 || i%temp != 0)
          break;
        key = key/10;
      }
      if(key == 0){
        arr[(*returnSize)++] = i;
      }
    }
    return arr;
}

除自身以外数组的乘积
题目来源
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

你可能感兴趣的:(C语言,c语言,开发语言)