69,373
社区成员
发帖
与我相关
我的任务
分享
int * p;
指针本身也是个变量,只是不同于大多数变量,指针存储的是一个地址,该地址所在的内存空间存储的才是实际的值(内容),而大多数变量存储的就是实际的数据内容(值)
如上 p是指针,p存储的是一个地址,如果你访问该地址通过p就可以了,如果你想访问该地址所存储的值那就需要通过*p来获取的。
如: int a = 10;
这里a是个普通变量,a所存储的就是数据值10,而如果你想访问a的地址那么需要通过 &a
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int *shas(int *a, int n1, int *b, int n2) {
int *c = NULL;
int c_size = 0;
int i, j;
i = j = 0;
while (i < n1 && j < n2){
if (a[i] == b[j]){
c = (int*)realloc(c, ++c_size*sizeof(int));
c[c_size - 1] = a[i];
i++, j++;
}
else if (a[i] < b[j]) {
i++;
}
else {
j++;
}
}
c = (int*)realloc(c, ++c_size*sizeof(int));
c[c_size - 1] = MAX; //最后一个元素是结束标记
return c;
}
int main() {
int a[] = { 1,2,3,4,5,6,7 };
int b[] = { 2,3,5,7,8,9,11 };
int *c = shas(a, sizeof(a) / sizeof(a[0]), b, sizeof(b) / sizeof(b[0]));
int i = 0;
while (c[i] != MAX) {
printf("%d ", c[i]);
i++;
}
free(c);
return 0;
}
//2 3 5 7
int merge(int *dst,int *a,int la,int *b,int lb){
int *ea=a+la,*eb=b+lb;
int *p =dst;
while(a<ea||b<eb){
if(b>=eb||(a<ea&&*a<=*b)) *p++ =*a++;
else *p++ =*b++;
}
return p-dst;
}
#include <stdio.h>
#include <stdlib.h>
// 返回c写入的实际个数
int shas(int *a, int aSize, int *b, int bSize, int* c, int cSize){
//int *indexa=a;
//int *indexb=b;
// int c[100];
int indexA = 0;
int indexB = 0;
int indexC=0;
while(true){
if(indexA >= aSize || indexB >= bSize || indexC >= CSIze){
break;
}
if( a[indexA] == b[indexB]){
c[indexC] = a[indexA];
indexA++;
indexB++;
indexC++;
}
if(a[indexA] > b[indexB]){
indexB++;
}
if(a[indexA] < b[indexB]){
indexA++;
}
}
return indexC;
}
int main(){
int a[]={1,2,3,4,5,6,7};
int b[]={2,3,5,7,8,9,11};
int c[100];
int cSize = shas(a, 7, b, 7, c, 100);
for(int cIndex = 0; cIndex < cSize, cIndex++){
printf("%d==asad\n", c[cIndex]);
//c++;
}
system("pause");
return 1;
}