编程小白~leetcode简单级

题目:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
代码模板:

int* twoSum(int* nums,int numsSize,int target)
{

}

通过该模板我们可以看出这只是让我们补充其中的一个子函数,该子函数的返回值类型是int类型的指针;其中包含形参nums[]整数数组,数组的长度numsSize和目标值。其中int* nums等价于int nums[].
最简单的方式就是遍历检验

int* twoSum(int* nums, int numsSize, int target) {
    int i,j;
     int *result = (int*)malloc(2*sizeof(int));
     for(i=0;i

关于指针的补充

int* ptr;
指针的类型是int*
指针所指向的类型是int
int p=a;//p的值是a的地址,也就是指针p指向a,p等于a的值
int p=&a;//p引用a的值
&取地址操作

变量a本质是代表一个存储单元,cpu通过该存储单元的地址访问该存储单元中的数据,所以a代表两个值:存储单元的地址和存储单元的数据

a表示a对应的存储单元中的数据
&a表示a对应的存储单元的地址
a表示:(要求a对应的存储单元中的数据一定是另一个存储单元的地址)另一个存储单元中的数据
当a声明的类型是int
时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是一个整数数值,通过*a可以访问这个数值,所以 *p=&p

用scanf输入数据时,存储地址按照顺序递减
#include
main()
{
    int a,b,c;
    scanf("%d,%d,%d",&a,&b,&c);
    printf(" &a=%d\n &b=%d\n &c=%d\n",&a,&b,&c);
}

输入和输出结果如下:

3 4 5
 &a=1703740
 &b=1703736
 &c=1703732
Press any key to continue
指针的进一步理解

这是进一步理解指针的经典案例,即swap()交换函数

#include

void swap(int*,int*);

int main(){
    int a=1,b=2;
    int*pa,*pb;  //定义两个指针类型的变量pa和pb,该指针的类型是int
    pa=&a;pb=&b;  //pa引用a的地址,pb引用b的地址
    swap(pa,pb); //实参是指针变量
    return 0;
}

//地址传递是函数传入的参数是地址通常是指向元变量的指针
void swap(int*p1 ,int *p2){
    int temp;
    temp=*p1;  //将p1指向的地址的值赋值给temp
    *p1=*p2 ; //p2的值赋值给p1
    *p2=temp ;
}


通过调试和测试不同阶段的值的方式来理解该函数

#include

void swap(int*,int*);

int main(){
    int a=1,b=2;
    int*pa,*pb;  //定义两个指针类型的变量pa和pb,该指针的类型是int
    pa=&a;pb=&b;  //pa引用a的地址,pb引用b的地址
    printf("%d,%d\n",&a,&b);
    swap(pa,pb); //实参是指针变量
    printf("%d,%d\n",&a,&b);
    printf("%d,%d\n",a,b);
    return 0;
}

//地址传递是函数传入的参数是地址通常是指向元变量的指针
void swap(int*p1 ,int *p2){
    int temp;
    temp=*p1;  //将p1指向的地址的值赋值给temp
    printf("%d\n",*p1);
    *p1=*p2 ; //p2的值复制给p1
    printf("%d\n",*p1);
    *p2=temp ;
}

输出

1703740,1703736
1
2
1703740,1703736
2,1

可以看出调用swap()前后a,b的地址并没有发生变化。重点在swap()中,temp是一个整型变量并不是指针类型(这是一个误区点),该函数只是进行值的变换,通过swap()中的两个printf可以清楚的看出来两个*p指向的值是不一样的。

要学习的地方真的还有很多,希望自己可以一步一步不放弃

你可能感兴趣的:(编程小白~leetcode简单级)