最近遇到的问题需要经常使用到指针,所以我做了一个整理,也参考了一些其他的资料。
如果需要将一个数组传递给函数,函数会修改该数组,该数组之后会用到。那么传参的时候需要传递数组的首地址,也就是指针,和数据的长度。例如,以下代码:
void systemCall(int * logical_block_address,int *n_lbs){
//文件路径、名称
logical_block_address[0] = 10;
logical_block_address[1] = 11;
logical_block_address[2] = 12;
logical_block_address[3] = 13;
logical_block_address[4] = 14;
logical_block_address[5] = 15;
logical_block_address[6] = 16;
logical_block_address[7] = 17;
*n_lbs = 8;
}
这个函数是为int数组赋值,数组长度根据函数确定。所有需要传入数组的指针和数组长度的指针。
有些时候,需要读取内存中的某个空间的二进制编码进行相关解析操作。
比如给定一段内存空间,写入一段char类型的数据,该内存空间有了数据。在本地创建了一个整形指针,需要将内存空间的数据解析成本地的整形数据。
int * p6;
p6 = malloc(sizeof(int)*2);
char * chr = "helloword";
printf("chr:%c\n",*chr);
*p6 = *((int *)chr);//***表示chr类型的指针强转成int型的指针,最后给相应指针的内容赋值。
printf("(char)p6:%x\n ",*p6);
最重要的是 (int *) chr 强转的这个指令,是将char类型的指针强转成 int类型的指针。
#include
#include
#include
int * getRandom( )
{
static int r[10];
int i;
/* 设置种子 */
srand( (unsigned)time( NULL ) );
for ( i = 0; i < 10; ++i)
{
r[i] = rand();
printf("%d\n", r[i] );
}
return r;
}
int main(void){
//指针中存放的是指向内存的首地址
//&表示取地址,指向某个变量的首地址
//*表示得到该地址存放的变量。
//1.指针的创建
int a = 2;
int * p1= &a;
printf("addr p1:%x\n",p1);
printf("value p1 pointed:%x\n",*p1);
//2.指针的算数运算
//数组是常量指针,不能进行算数运算。指针可以进行算数运算。
int var[] = {10, 100, 200};
int *ptr = var;
for (int i = 0; i < 3; i++)
{
printf("存储地址:var[%d] = %x\n", i, ptr );
printf("存储值:var[%d] = %d\n", i, *ptr );
/* 移动到下一个位置 */
ptr++;
}
//3.指针数组和指向数组的指针
int *p2[3];//指针数组,数组中的每一个元素都指向int数据
int *p3[] = {1,2,3};
for(int i = 0;i <3;i++){
p2[i] = &var[i];
printf("p2[%d]:%d\n",i,*p2[i]);
printf("p3[%d]:%d\n",i,p3[i]);
}
//4.指向指针的指针
int **p4;
p4 = &p1;
printf("**p4:%d\n",**p4);
//5.指针作为函数参数
//指针作为函数参数传递,实际上是传递一个地址进去。
//在函数内部生命静态变量,可以将指针返回给全局变量。
int *p5 = getRandom();
for ( int i = 0; i < 10; i++ )
{
printf("*(p + [%d]) : %d\n", i, *(p5 + i) );
}
//6.关于非数组类型指针使用说明
//指针指向一片内存空间,对内存空间进行访问。
int * p6;
p6 = malloc(sizeof(int)*2);
char * chr = "helloword";
printf("chr:%c\n",*chr);
*p6 = *((int *)chr);//***表示chr类型的指针强转成int型的指针,最后给相应指针的内容赋值。
printf("(char)p6:%x\n ",*p6);
return 0;}
参考:https://www.runoob.com/cprogramming/c-pointers.html