您的位置:首页 > 编程语言 > C语言/C++

黑马程序员——C语言指针

2014-05-18 22:31 92 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

今天看了李明杰老师的C语言基础部分,当然自己感觉也是最难的部分,也就是指针。

首先呢,要明白指针储存的是一个变量的地址。说白了指针就是一个地址(乱说的。。。)

下面是一段很经典的利用指针对函数进行操作来交换两个数的代码

#include <stdio.h>

//void swap(char v1, char v2) {
//    printf("交换之前之前:v1=%d,v2=%d\n", v1, v2);
//
//    char temp;
//
//    temp = v1;
//    v1 = v2;
//    v2 = temp;
//
//    printf("调用函数之后:v1=%d,v2=%d\n", v1, v2);
//}

void swap(char *v1, char *v2) {
char temp;

temp = *v1;
*v1 = *v2;
*v2 = temp;
}

int main(int argc, const char * argv[])
{
char a = 10;
char b = 9;

printf("调用函数之前:a=%d,b=%d\n", a, b);

swap(&a, &b);

printf("调用函数之后:a=%d,b=%d\n", a, b);
return 0;
}
定义一个指针使用的方式就是 类型 *变量名 such as :int *p;意思就是定义一个int类型的指针变量。

还有一个很难理解的就是在定义指针之后,在使用他的时候就不能在后面加*号了,加*号的意思是调用指针储存的地址空间的值。

such as:int *p;int a=0; p=&a;那么*p就是调用p指针储存的地址空间的值,也就是a的值为0。

下面一段代码也是很经典的用一个函数返回两个值

#include <stdio.h>

int sumAndMinus(int v1, int v2, int *p) {
*p = v1 - v2;
return v1 + v2;
}

int main(int argc, const char * argv[])
{
int a = 10;
int b = 4;

// 接收a跟b的和
int sum;
// 接收a跟b的差
int minus;

sum = sumAndMinus(a, b, &minus);

printf("sum=%d, mimus=%d", sum, minus);
return 0;
}


这也就是通过指针实现的功能,通过指针将一个变量传入函数,然后改变这个指针储存的地址空间的值。

#include <stdio.h>

void test() {
char a;
// a = 10; 直接引用

// 定义了一个指针变量b,而且b只能指向char类型的变量
char *b;

// 让指针变量b指向a
b = &a;

// 这里的*b代表:访问b值对应的存储空间(也就是变量a的存储空间)
// 相当于a = 10;
*b = 10;

printf("%d\n", a);

a = 11;

// 这里的*b相当于取出变量a存储的值
printf("%d\n", *b);
}

void test1() {
char a = 10;

char *b = &a;
/* 相当于下面两句
char *b;
b = &a;
*/
}

void test2() {
// 这是错误的做法
char *p;
// 应该在指针确定指向的变量后,再进行相应的操作
*p = 10;
}

void test3() {
// 这个错发也是错误的
char *p;
// 指针变量是用来存储变量地址的,不能随便赋值一个常数,除非你这个常熟恰好是某个变量的地址
p = 100;
}

int main(int argc, const char * argv[])
{

return 0;
}


上面这段代码是李明杰老师写的,很清晰的讲明了什么是指针。

----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: