数组指针和指针数组及引用的简单理解.md

a和&a的区别,及指针数组和数组指针的简单理解:

以代码的形式解释:

#include <iostream>
using namespace std;

int main()
{
	//a是数组时,a 和 &a的区别
	int a[5] = { 1,2,3,4,5 };
	int *ptr1 = (int *)(&a+1);
	ptr1--;
	cout << *(a + 1)<<" ";
	cout << *(ptr1) << endl;
	//输出:2 5
	/*
		结果 5 解释如下:
		a是指向数组a的首地址,而&a指向了整个数组a
		所以 &a+1 指向了整个数组后面哪一位(也就是a[4]后面的位置)
		
		由此可以&a可以写成下面形式: int(*p)[5] = &a;
	*/

	int(*p)[5] = &a;
	int *tptr = (int *)(&a+1 );
	cout << p + 1 << " " << tptr << endl;
	//输出:0095FAE4 0095FAE4
	//由此的确证明了 int(*p) [5] = &a

	/*
		那int(*p)[3]与int* p[3]的区别是什么呢(即指针数组和数组指针的区别):
		int(*p)[3] 定义了一个指针变量p,这个指针变量指向了一个含有三个int类型的数组,
		这个指针称为 数组指针,也叫行指针
		int* p[3] 定义了一个数组p,这个数组里面有三个int类型的指针变量(p[0]、p[1]、p[2])
		这样的数组称为 指针数组
		
		int(*p)[3]中 p+1将指向下一行的数组,如果没有下一行,就会执行这一行最后一个元素的后面
		因此可以用p[0]来表示这一行,p[0][i]获取这一行中的数,
		由于只有一行,所以用p[1][i]就会输出不对,下面实践证明:
	*/
	cout << p[0][1] <<" "<<p[0][2]<<" 不存在第二行的情况:"<<p[1][0]<< endl;
	//输出结果: 2 3 不存在第二行的情况:-858993460
	

	//int b[3][3] = { 1,2,3,4,5,6,7,8,9 };
	//int (*ptr2)[3];
	//ptr2 = &b[1];
	//ptr2++;
	//cout << ptr2 [0][1]<<"\t"<< ptr2[1][1] << endl;

	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用如下代码: #include <tomcrypt.h> unsigned char md5_val[16]; void md5sum(unsigned char *data, int len) { hash_state md; md5_init(&md); md5_process(&md, data, len); md5_done(&md, md5_val); } ### 回答2: 要使用C语言调用libtomcrypt库来实现求数组MD5值,首先需要在代码中引用libtomcrypt库的头文件。在使用libtomcrypt库之前,需要确保已经正确安装了该库。 以下是一个使用libtomcrypt库计算数组MD5值的示例代码: ```c #include <tomcrypt.h> void computeMD5(const unsigned char* inputData, unsigned long dataLength, unsigned char* md5Output) { hash_state md5State; md5_init(&md5State); md5_process(&md5State, inputData, dataLength); md5_done(&md5State, md5Output); } int main() { unsigned char inputArray[] = {0x61, 0x62, 0x63}; // 输入数组 unsigned char md5Result[16]; // 存储MD5结果的缓冲区 computeMD5(inputArray, sizeof(inputArray), md5Result); // 打印MD5结果 printf("MD5: "); for (int i = 0; i < sizeof(md5Result); i++) { printf("%02x", md5Result[i]); } printf("\n"); return 0; } ``` 上述代码中,computeMD5函数用于计算数组MD5值,参数inputData表示输入数据数组,dataLength表示输入数组的长度,md5Output表示存储计算结果的缓冲区。示例代码还提供了一个main函数来测试computeMD5函数的使用。注意,需要确保正确地安装了libtomcrypt库,并在编译时链接相应的库文件。 以上就是使用C语言调用libtomcrypt库实现求数组MD5的函数的示例代码。编写代码时应格外注意引用正确的头文件以及链接对应的库文件。 ### 回答3: 要使用C语言调用libtomcrypt库实现求数组MD5函数,需要先引用libtomcrypt的头文件。以下是一个示例代码: ```c #include <tomcrypt.h> #include <stdio.h> #include <string.h> void md5_hash(unsigned char* input, unsigned long input_len, unsigned char* output, unsigned long* output_len) { hash_state md; if (md5_init(&md) != CRYPT_OK) { printf("Error initializing MD5\n"); return; } if (md5_process(&md, input, input_len) != CRYPT_OK) { printf("Error processing MD5\n"); return; } if (md5_done(&md, output, output_len) != CRYPT_OK) { printf("Error finalizing MD5\n"); return; } } int main() { unsigned char input[] = "Hello World"; unsigned long input_len = strlen((char*)input); unsigned char output[16]; unsigned long output_len = sizeof(output); md5_hash(input, input_len, output, &output_len); printf("MD5 Hash: "); for (unsigned long i = 0; i < output_len; i++) { printf("%02x", output[i]); } printf("\n"); return 0; } ``` 上述代码中,`md5_hash`函数接收一个输入数组和输入数组长度作为参数,以及一个输出数组和输出数组长度的指针作为参数。在函数内部,首先初始化MD5哈希状态结构体`md`,然后使用`md5_process`函数处理输入数据。最后,使用`md5_done`函数结束MD5哈希计算,并将结果存储在输出数组中。 在`main`函数中,我们定义了一个示例输入数组`input`,用于演示MD5哈希计算。然后,通过调用`md5_hash`函数计算`input`数组MD5哈希值,并将结果打印输出。 请注意,编译时需加上libtomcrypt的库文件,比如使用gcc编译命令:`gcc -o example example.c -ltomcrypt`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值