Java培训、Android培训、iOS培训、.Net培训、期待与您交流!

(以下内容是对黑马苹果入学视频的个人知识点总结)

(一)指针

首先指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。

1)指针变量的定义

1>定义的格式

类名标识符  *指针变量名;

int *p;

指针需要先定义然后再赋值

简单取值

int a = 10;

int *p;

p = &a;

简单改值

*p = 9;

定义的时候赋值

int a = 10;

int *p = &a;

指针变量都占用8个字节的存储空间,它存储的时数据的地址

2>指针可以实现修改实参

不能交换外面实参的值,仅仅是交换了内部指针的指向

3>指针可以清空

p=NULL;清空后的指针是不能再间接访问其他存储空间

 #include <stdio.h>

 int main()
{
/* 不建议的写法, int *p只能指向int类型的数据
int *p;
double d = 10.0;
p = &d;*/ /* 指针变量只能存储地址
int *p;
p = 200;
*/ /* 指针变量未经过初始化,不要拿来间接访问其他存储空间
int *p;
printf("%d\n", *p);
*/ int a = ;
/*
int a;
a = 10;
*/ /*
int *p;
p = &a;
*/
// 定义变量时的*仅仅是一个象征,没有其他特殊含义
int *p = &a; // 不正确的写法
// *p = &a;
p = &a; // 这个时候的*的作用:访问指向变量p指向的存储空间
*p = ; char c = 'A'; char *cp = &c; *cp = 'D'; printf("%c\n", c); return ;
}

(二)指针与数组

可以定义指向一维数组的指针,可以使用指针遍历数组的元素

 #include <stdio.h>

 /*
1.数组元素的访问方式
int ages[5];
int *p;
p = ages;
1> 数组名[下标] ages[i]
2> 指针变量名[下标] p[i]
3> *(p + i) 2.指针变量+1,地址值究竟加多少,取决于指针的类型
int * 4
char * 1
double * 8
*/
void change(int array[]); int main()
{
// 20个字节
int ages[] = {, , , , }; change(ages); return ;
} // 利用一个指针来接收一个数组,指针变量array指向了数组的首元素
void change(int *array)
{
printf("%d\n", array[]);
//printf("%d\n", *(array+2));
} /*
void change(int array[])
{
int s = sizeof(array); printf("%d\n", s);
}*/ void test()
{
double d = 10.8;
double *dp;
dp = &d; printf("dp = %p\n", dp);
printf("dp + 1 = %p\n", dp + ); int ages[] = {, , , , }; int *p;
// 指针变量p指向了数组的首元素
p = &ages[];
// 数组名就是数组的地址,也是数组首元素的地址
//p = ages; /*
p ---> &ages[0]
p + 1 ---> &ages[1]
p + 2 ---> &ages[2]
p + i ---> &ages[i]
*/ //printf("%d\n", *(p+2)); printf("%d\n", p[]); /*
for (int i = 0; i<5; i++) {
printf("ages[%d] = %d\n", i, *(p+i));
}*/ // printf("%p\n", p);
// printf("%p\n", p + 1);
// printf("%p\n", p + 2);
}

(三)指针与字符串

定义字符串的2种方式

1> 利用数组

char name[] = "itcast";

* 特点:字符串里面的字符是可以修改的

* 使用场合:字符串的内容需要经常修改

2> 利用指针

char *name = "itcast";

* 特点:字符串其实是一个常量字符串,里面的字符是不能修改

* 使用场合:字符串的内容不需要修改,而且这个字符串经常使用

 #include <stdio.h>

 int main()
{
char name[]; printf("请输入姓名:\n"); scanf("%s", name); // 'j' 'a' 'c' 'k' '\0' //printf("%c\n", name[3]); //printf("刚才输入的字符串是:%s\n", name); return ;
} // 定义字符串数组
void test2()
{
char *name = "jack"; //int ages[5]; // 指针数组(字符串数组)
char *names[] = {"jack", "rose", "jake"}; // 二维字符数组(字符串数组)
char names2[][] = {"jack", "rose"};
} // 定义字符串
void test()
{
// 字符串变量
char name[] = "it";
name[] = 'T'; //printf("%s\n", name); // "it" == 'i' + 't' + '\0'
// 指针变量name2指向了字符串的首字符 // 字符串常量
char *name2 = "it"; char *name3 = "it"; //*name2 = 'T'; //printf("%c\n", *name2); printf("%p\n%p\n", name2, name3); //printf("%s\n", name2);
}

(四)指向函数的指针

指向函数的指针的定义

定义的一般形式:数的返回值类型 (*指针变量名)(形参1, 形参2, ...);

double (*p)(double, char *, int);

p = haha;或者 double (*p)(double, char *, int) = haha;

3.如何间接调用函数

1> p(10.7, "jack", 10);

2> (*p)(10.7, "jack", 10);

1>由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的

2>指向函数的指针只要有两个用途:

①调用函数

②将函数作为参数在函数间传送

黑马程序员——C语言基础 指针的更多相关文章

  1. 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...

  2. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  3. 黑马程序员——C语言基础 枚举 宏定义 自定义 static exterm

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)枚举 1)枚举类型的定义 枚举是C语言中的一种基本数据类型,并不是构 ...

  4. 黑马程序员——C语言基础 函数

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)函数的定义 1> 任何一个C语言程序都是由一个或者多个程序段( ...

  5. 黑马程序员——C语言基础 char字符 数组

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)char类型 1)存储细节 ASCII单字节表(双字节GBK\GB2 ...

  6. 黑马程序员——C语言基础 scanf函数 基本运算 三目运算符

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)scanf函数 1>  简单介绍一下scanf函数   这是在 ...

  7. 黑马程序员——C语言基础 变量类型 结构体

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)变量类型 1)局部变量 1> 定义:在函数内部定义的变量,称为 ...

  8. 黑马程序员——C语言基础 流程控制 选择结构和循环结构

    ---恢复内容开始--- Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)流程控制 1> 顺序结构:默认的流程 ...

  9. 黑马程序员——C语言基础 字符串

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)字符串 1>字符串是由多个字符组合在一起形成的 2>初始 ...

随机推荐

  1. Docker常见问题解决

    一.Docker中运行ubuntu容器,字体颜色太深导致无法看清 解决方案: 1. 利用dircolors命令,查看我们的系统当前的文件名称显示颜色的值,然后利用管道重定向到用户目录下的任意一个文件( ...

  2. jquery了解

    jQuery 库 - 特性 jQuery 是一个 JavaScript 库. jQuery 是一个 JavaScript 函数库. jQuery 库包含以下特性: HTML 元素选取 HTML 元素操 ...

  3. fonts.googleapis.com 加载慢的解决方法

    把:fonts.googleapis.com 替换成 fonts.useso.com

  4. Redis学习-基础环境介绍(二)

    1.通过VMware安装了Centos6.8系统 2.Reids安装过程,需要GCC环境 »通过下面命令,根据提示直接安装 1 yum install gcc 3.Redis选用的是3.2.4(建议使 ...

  5. Mac 下 PostgreSQL 的安装与使用

    在 mac 下,可以利用 homebrew 直接安装 PostgreSQL: 1 brew install postgresql -v 稍等片刻,PostgreSQL 就安装完成.接下来就是初始数据库 ...

  6. JAVA 1.5 运算符

    1. 关系运算符:大于(>).小于(<).等于(==).不等于(!=).大于等于(>=).小于等于(<=),关系运算的结果是个boolean值.2. 逻辑运算符:重点讲解两个, ...

  7. nslookup

    检查DNS http://arch.pconline.com.cn//pcedu/soft/wl/assist/10307/193330.html

  8. 把excel导入的自定义时间改成yyyyMMdd

    public static String changeCellToString(XSSFCell cell){ String result = "";// Object value ...

  9. RANSAC 剔除错误匹配 估计模型

    随机抽样一致,这个算法,我以前一直都没有理解透彻.只知道可以用来直线拟合,网上大多数中文博客也都是写直线拟合的,但是用来匹配二维特征的时候,总还是没弄明白. 基本概念参考 http://www.cnb ...

  10. myeclipse下构建maven web项目

    首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 war的形式 由于packing是war包,那么下面 ...