【c++】(*( void (*) ( ) ) 0  ) ()的含义,二维数组数组名的含义和用法 *(*(a+i)+j)的含义,*(a+1)+3的含义,*(a+1+1)的含义

(*( void (*) ( ) ) 0  ) ();

0x00000001对当前这个地址赋值->(int*)0x00000001

0x00000001要跑到当前地址里面去赋值应该怎么做,一般是在执行的时候遇到函数调用,跑到子函数里去执行,

将它强制类型转成函数名也就是void (*p)() 0(函数指针)->*(void (*p)() 0)(这是一个函数名)->(*( void (*) ( ) ) 0  ) ()跑到地址为0的函数里面去执行。

二维数组数组名的用法

#include<stdio.h>
#include<stdlib.h>
int main()
{

	int b[10];
	int a[3][4] = { 1,2,3,4,
		            5,6,7,8,
		            9,0,11,12 };
	printf("%d,%d\n", a, *a);//1 a[0] 1
	printf("%d,%d\n", a, (a+1));// 1 a[1] 5
	printf("%d,%d\n", *a, *a+1);//1 a[0][1] 2
	printf("%d,%d,%d,%d\n", **a, *(*a+1),*(*(a+1+1)),*(*a+1+1),*(*(a+1)+3));
	//1,2  *a相当于a[0],再加1,就是第二列,然后再*就是a[0][1]
	//*(a+1+1)相当于a[2] *就是a[2][0] 9
	//*a相当于a[0] *a+1+1相当于a[0][2] 3
	//*(a+1)相当于a[1]  *(a+1)+3 相当于a[1][3] 8
	//总结一句话,*(a)相当于a[0];
	//对地址的一次解引用就是它所指向的哪个对象。*(*(a+i)+j)->a[i][j]
	//怎么调用呢,int *(p)[4]=a
	//p++先执行p没加之前的值然后再 ++	
	int (*p)[4] = a;
	for (p = a; p < a + 3; p++)//一跳跳一行指针变量可以自加
	{
		for (int j = 0; j < 4; j++)
		{
			printf("%d", *(*p + j));
		}
	}
	//一维数组数组名取地址符相当于二维数组名
	system("pause");
	return 0;
}

运行结果如图:

    *a相当于a[0],再加1,就是第二列,然后再*就是a[0][1]
    *(a+1+1)相当于a[2] *就是a[2][0] 9
    *a相当于a[0] *a+1+1相当于a[0][2] 3
    *(a+1)相当于a[1]  *(a+1)+3 相当于a[1][3] 8
    总结一句话,*(a)相当于a[0];
    对地址的一次解引用就是它所指向的哪个对象。*(*(a+i)+j)->a[i][j]
    怎么调用呢,int *(p)[4]=a
    p++先执行p没加之前的值然后再 ++     

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值