日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

连续地址数据(数组或者malloc的内存)作为函数参数

發(fā)布時(shí)間:2023/11/27 生活经验 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 连续地址数据(数组或者malloc的内存)作为函数参数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在編程時(shí),一簇連續(xù)的內(nèi)存單元,比如數(shù)組或者malloc的內(nèi)存塊,如下的數(shù)組a 或者指針p.

int a[4];

int *p = malloc(4 * sizeof(int));

我們要想修改上述連續(xù)的內(nèi)存塊,可以寫一個(gè)函數(shù)(一維指針做參數(shù)傳入起始地址即可)來搞定。

If you want to pass a single-dimension array as an argument in a function, you would have to declare a formal parameter in one of following three ways and all three declaration methods produce similar results because each tells the compiler that an integer pointer is going to be received. Similarly, you can pass multi-dimensional arrays as formal parameters.

Way-1

Formal parameters as a pointer ?

void myFunction(int *param) {...
}

Way-2

Formal parameters as a sized array ?

void myFunction(int param[10]) {...
}

Way-3

Formal parameters as an unsized array ?

void myFunction(int param[]) {...
}

1. 一維指針做參數(shù)

#include <stdio.h>
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))void arrayDouble(int *p, int size)
{for (int i=0; i<size; i++){*(p+i) = *(p+i) * 2;}
}void arrayDouble1(int p[], int size)
{for (int i=0; i<size; i++){p[i] = p[i] * 2;}
}void arrayDouble2(int p[4], int size)
{for (int i=0; i<size; i++){p[i] = p[i] * 2;}
}int main()
{int arr[] = {1, 2, 3, 4};for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}printf("\n");arrayDouble(arr, ARRAY_SIZE(arr));for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}	printf("\n");arrayDouble1(arr, ARRAY_SIZE(arr));for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}printf("\n");arrayDouble2(arr, ARRAY_SIZE(arr));for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}printf("\n");return 0;
}

?上述code運(yùn)行結(jié)果:

1 2 3 4?
2 4 6 8?
4 8 12 16?
8 16 24 32?
?

2. 兩維指針做參數(shù)

用兩維數(shù)組做參數(shù)也可以一簇連續(xù)的內(nèi)存單元的值,只是沒有必要,大材小用,炫技而已,或者對(duì)指針操作含糊不清。

#include <stdio.h>
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))void arrayDouble(int **pp, int size)
{int *p = *pp;for (int i=0; i<size; i++){*(p+i) = *(p+i) * 2;}	
}/* arrayDouble1 is the same as arrayDouble,just without temp variable */
void arrayDouble1(int **pp, int size)
{for (int i=0; i<size; i++){*(*pp+i) = *(*pp+i) * 2;}	
}int main()
{int arr[] = {1, 2, 3, 4};int *p = &arr[0];for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}printf("\n");arrayDouble(&p, ARRAY_SIZE(arr));for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}	printf("\n");arrayDouble1(&p, ARRAY_SIZE(arr));for (int i=0; i<ARRAY_SIZE(arr); i++){printf("%d ", arr[i]);}	printf("\n");return 0;
}

?運(yùn)行結(jié)果:

1 2 3 4?
2 4 6 8?
4 8 12 16?

總結(jié)

以上是生活随笔為你收集整理的连续地址数据(数组或者malloc的内存)作为函数参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。