常量指针_指针常量

合集下载

C语言中的空指针、空指针常量、NULL & 0

C语言中的空指针、空指针常量、NULL & 0

概述在c语言中NULL和0的值都是一样的,但是为了目的和用途及容易识别的原因,NULL用于指针和对象,0用于数值对于字符串的结尾,使用’\0’,它的值也是0,但是让人一看就知道这是字符串的结尾,不是指针,也不是普通的数值。

在不同的系统中,NULL并非总是和0等同,NULL仅仅代表空值,也就是指向一个不被使用的地址,在大多数系统中,都将0作为不被使用的地址,所以就有了类似这样的定义#define NULL 0但并非总是如此,也有些系统不将0地址作为NULL而是用其他的地址,所以说,千万别将NULL和0等价起来,特别是在一些跨平台的代码中,这更是将给你带来灾难。

1、什么是空指针常量(null pointer constant)?[6.3.2.3-3] An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.这里告诉我们:0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constan t expression”)以及 (void*)0 (tyc:我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。

至于系统选取哪种形式作为空指针常量使用,则是实现相关的。

一般的 C 系统选择 (void*)0 或者 0 的居多(也有个别的选择0L);至于 C++ 系统,由于存在严格的类型转化的要求,void* 不能象 C 中那样自由转换为其它指针类型,所以通常选 0 作为空指针常量(tyc: C++标准推荐),而不选择 (void*)0。

2、什么是空指针(null pointer)?[6.3.2.3-3] If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.因此,如果 p 是一个指针变量,则 p = 0;、p = 0L;、p = '\0';、p = 3 - 3;、p = 0 * 17; 中的任何一种赋值操作之后(对于 C 来说还可以是 p = (void*)0;), p 都成为一个空指针,由系统保证空指针不指向任何实际的对象或者函数。

常量指针和指针常量

常量指针和指针常量

常量指针和指针常量
1、常量指针
常量指针是指将一个常量的地址赋给指针,表示指针不能改变该常量值,它只能把它指向别的地址。

常量指针的声明模式大多是int* const p,其中的const放在*和p 之间,表示指针本身是不可变的,可以理解成指向变量的常量指针。

常量指针的作用:
2、指针常量
指针常量是指指针的值是不可变的,但指针可以指向任意变量。

指针常量的声明模式是const int* p ,其中const放在*和p之间,表示指针指向的地址不可以变化,就是可以理解成常量指向变量的指针。

指针常量的作用:
总的来说,常量指针和指针常量是指针的一种特殊形式,可以更好的安全性程序,编程中要结合自身程序来进行灵活使用,使程序更加安全高效,找到最优的解决方案。

C++的#define,typedef,extern的使用

C++的#define,typedef,extern的使用
{ static double money=20000000; int num; public: int get(){return num;}; double getMoney(){reuturn money;}
} double *p=&NJUPT::money; double (*p)()=&NJUPT::getMoney():
Ⅳ:类成员的指针
类成员和一般的外部变量相互比较,不同就是它所在的域不同,这个域很重要,它决 定了该变量可以使用的范围。那么一个指针如果要指向类的成员函数或者成员变量,那么除 了要表达它的返回类型、参数列表或者类型之外,那么还要说明它所指向的变量(或者函数)
的域,为了说明该域我们要使用类域限定: class njust
Visual Stadio C/C++
——#define,typeof,指针使用方法说明
对于一般非专业的 C/C++编程人员,一般会对#define,typeof,指针等定义模糊,不知道 怎么应用这些语句。结合本人的编程经验和看过的一些资料,下面将在 Visual Stadio 2012(本 人系统是 64 位的,内存位移偏量是 4)编程环境下结合一些实例对这些语句进行讲解,主 要还是对常用于微处理器的语句进行讲解。希望能对大家的学习和应用有一些帮助。如果你 发现其中有什么不对的说法可以发邮件给我(554252585@)。
int *ptr; ptr = MALLOC ( 5, int ); 将这宏展开以后的结果:ptr = (int *) malloc ( (5) * sizeof(int) ); 这个例子是宏定义的经典应用之一,完成了函数不能完成的功能,但是宏定义也不 能滥用,通常,如果相同的代码需要出现在程序的几个地方,更好的方法是把它实 现为一个函数。 (2)下面总结宏和函数的不同之处,这段总结摘自《C 和指针》一书。

c 指针和字符串常量 比对

c 指针和字符串常量 比对

c 指针和字符串常量比对一、概述在C语言中,指针和字符串常量是两个重要的概念。

指针是指向内存地址的变量,而字符串常量则是由字符数组表示的字符串。

本文档将介绍如何使用指针和字符串常量进行比对,以实现字符串的查找、替换和比较等功能。

二、基本概念1. 指针:指针变量存储了一个内存地址,可以通过该地址来访问该内存地址所指向的数据。

在C语言中,可以使用指针来操作内存,包括分配内存、释放内存、读取内存等操作。

2. 字符串常量:字符串常量是由字符数组表示的字符串,可以通过数组名来访问字符串中的各个字符。

在C语言中,字符串是以空字符('\0')结尾的字符数组。

三、比对方法1. 相等性比对:使用==运算符可以对两个字符串常量进行相等性比对,判断它们是否相等。

2. 包含关系比对:使用==或!=运算符可以对一个字符串常量是否包含另一个字符串常量进行比对。

可以使用循环遍历目标字符串,逐个比较字符是否在源字符串中出现。

3. 子串匹配比对:可以使用标准库函数strcmp()或strstr()等方法来进行子串匹配比对。

strcmp()函数用于比较两个字符串的大小关系,而strstr()函数则用于查找目标字符串中是否包含源字符串中的子串。

4. 指针和字符串的联合使用:可以将指针和字符串常量联合使用,通过指针来访问字符串中的各个字符,从而进行比对操作。

例如,可以使用指针来遍历一个字符串中的各个字符,并与另一个字符串进行比对。

四、示例代码以下是一个简单的示例代码,展示了如何使用指针和字符串常量进行比对操作:```c#include <stdio.h>#include <string.h>int main() {char source[] = "Hello, world!";char target[] = "world";char *pSource = source; // 使用指针来访问源字符串中的各个字符 char *pTarget = target; // 使用指针来访问目标字符串中的各个字符 int result = strcmp(pSource, pTarget); // 使用strcmp()函数进行大小关系比对if (result == 0) { // 如果相等,输出结果printf("源字符串包含目标字符串\n");} else { // 如果不相等,输出结果printf("源字符串不包含目标字符串\n");}return 0;}```五、总结通过使用指针和字符串常量,我们可以进行各种比对操作,包括相等性比对、包含关系比对、子串匹配比对等。

c语言常量的使用方式

c语言常量的使用方式

c语言常量的使用方式C语言常量是在程序中用于存储固定值的标识符,其值在程序运行期间不发生变化。

常量在程序中起到了固定数值的作用,使得程序可以在不同地方使用相同的数值而不需要重复定义。

在C语言中,常量可以分为整型常量、浮点型常量、字符常量和字符串常量。

1.整型常量:整型常量是表示整数值的常量。

它可以用十进制、八进制或十六进制表示。

十进制表示法是默认的表示法,十六进制以0x或0X开头,八进制以0开头。

例如:int num1 = 10; // 十进制int num2 = 012; // 八进制,等同于10int num3 = 0xA; // 十六进制,等同于102.浮点型常量:浮点型常量用于表示实数值。

它可以用小数形式或指数形式表示。

小数形式包括整数部分和小数部分,指数形式由基数和指数部分组成。

例如:float num1 = 3.14; // 小数形式double num2 = 6.02e23; // 指数形式,表示6.02*10^233.字符常量:字符常量是用单引号括起来的有一个字符的常量。

每个字符都对应一个整数值。

例如:char ch = 'a';4.字符串常量:字符串常量是用双引号括起来的一串字符的常量。

字符串常量在内存中以字符数组的形式存储。

例如:char str[] = "Hello World";除了以上几种常量,C语言还提供了一些特殊的常量,如:-NULL:表示空指针常量。

- sizeof:表示以字节为单位的对象的大小。

- true/false:表示逻辑常量的真和假。

常量的使用方式如下:1.声明常量:可以使用const关键字在变量名前面声明常量,如:const int NUM = 100;2.使用常量:在程序中使用常量时,可以直接使用常量的标识符表示其值,如:int result = NUM * 2;3.常量与变量的运算:常量可以与变量进行运算,运算结果仍然是常量类型。

第8章 指针

第8章 指针

已说明过,且变量类型应与指针类型一致。
可以用一个已赋初值的指针去初始化另一 个指针变量。 不要用一个局部变量去初始化 static 型指针。
4、间接引用指针
与指针有关的两个运算符 & 取地址运算符 * 实例: 指针运算符(或称“间接引用”运算符)
void main(){
int a=10; int *pointer_1; pointer_1 = &a; cout<< * pointer_1;

8.1 指针概念
8章
指针
8.5 const指针
8.6 指针与函数
8.2 指针运算
8.3 指针与数组
8.7 字符指针
8.4 堆内存分配
8.9 命令行参数
本章介绍C++的指针。C++语言拥有在运行时获得变量的地址和操作地址 的能力,这种用来操纵地址的特殊类型变量就是指针,指针对于成功地进 行c++语言程序设计是至关重要的。学习本章后要求能够使用指针,能够用 指针给函数传递参数,理解指针、数组和字符串之间的紧密联系,能够声 明和使用字符串数组,正确理解命令行参数。
值。 实例:ch8_9.txt
【 8.5 const指针】
指向常量的指针(常量指针):
在指针定义语句前加上const,表示指向的对象是常量。 不能通过指针来改变所指对象的值,但指针本身可以改 变,可以指向另外的对象。 例: const int a=78;
const int b=28; int c=18; const int *pi=&a; *pi=58; pi=&b; *pi=68; pi=&c; *pi=88; c=98;

c语言中constant修饰指针

c语言中constant修饰指针

c语言中constant修饰指针
在C语言中,使用`const`关键字修饰指针可以创建一个指向常量的指针。

这意味着指针指向的值不能通过该指针进行修改。

有两种使用方式:
1. `const`修饰指针本身:
```
const int *ptr;
```
这表示`ptr`是一个指向整数常量的指针,即可以修改指针所指向的位置的值,但不能通过该指针修改这个值。

2. `const`修饰指针所指向的值:
```
int * const ptr;
```
这表示`ptr`是一个常量指针,即指针本身的值不能修改,但可以通过该指针修改所指向的值。

需要注意的是,这两种方式可以同时使用:
```
const int * const ptr;
```
这表示`ptr`既是一个指向整数常量的指针,同时指针本身也是一个常量。

即不能通过该指针修改指向的值,也不能修改指针本身的值。

C语言指针详解

C语言指针详解

C语言指针详解1 程序如何运行当我们打开电脑中的任何一个程序运行时,我们的操作系统会将该程序存在硬盘的所有数据装载到内存中,然后有CPU 进行读取内存中的数据并进行计算,并将计算的结果返回给我们的操作系统,然后操作系统将相应的动作交付给相应的硬件来完成。

如:将声音数据交给声卡,最后有音响输出来,将图像交给显卡最后有显示器输出……但是还会有一部分数据会返回给内存,以供程序下面的语句继续使用。

我们都知道内存的容量有很大,如:4G,8G, 16G,有时候我们会打开很多的程序,所有的程序的数据都存放到我们的内存中,那么CPU是如何正确的读取我们的不同程序的数据并加以计算的哪?2 内存的假设设计为了让我们的CPU 可以很好的读取内存中的数据,内存必须做优化设计,于是给内存设定了集合设计,将我们的内存分成很多大小相同的方格(盒子),所有的数据将放入这些小盒子中,将不同的程序的数据放入到不同的小盒子中,这样就出现的模块化的内存,当我执行程序的一个命令时,CPU就会从相应的盒子读数据然后计算,由于我们硬件所能访问或计算的最小单位是字节,所以内存中的这样的一个小盒子的大小就给他规定一个字节。

3 地址和指针一般我们声明一块内存空间的时候,会给他取一个名字,为的是我们在编写程序的时候方便使用空间中存放的值,但是CPU 读数据的时候会忽视这个名字,因为CPU无法理解这样的数据,CPU 只能执行0,1代码,那么CPU是如何知道从什么地方读取数据,又到什么地方地址数据的读取的那,所以必须对内存做2次设计,就是将内存中分成的很多小盒子下面标注一些顺序的序号,例如:从第一个盒子开始,标注1,2,3,4,5,6,7,……每一个数字对应一个盒子,但是真正的内存如中不是使用这些十进制数字的,而是使用16进制整数表示的,如0x16ffee。

这些我们标记的数字就叫做内存中的地址。

由于这些地址和盒子是对应的关系,所以只要知道了地址,就可以得到对应盒子中存放的数据了,形象的说,我们说这个地址指向对应的盒子,在C语言中可以通过地址得到对应盒子的数据是*地址。

C语言的简答题包含解答共60道题

C语言的简答题包含解答共60道题

C语言的简答题包含解答共60道题1. 什么是C语言?◆C语言是一种通用的编程语言,由Dennis Ritchie于1972年开发。

它被广泛用于系统编程、应用程序开发和嵌入式系统等领域。

2. 什么是C语言的注释?◆在C语言中,注释用于添加对代码的解释和说明。

有两种类型的注释:单行注释(//)和多行注释(/* */)。

3. 什么是变量?如何声明变量?◆变量是用于存储数据的标识符。

在C语言中,变量的声明包括变量类型和名称,例如:`int myVariable;`。

4. 什么是数据类型?举例说明几种C语言的数据类型。

◆数据类型定义了变量可以存储的数据类型。

一些C语言的数据类型包括int、float、char、double等。

5. 什么是C语言的关键字?◆关键字是C语言中具有特殊含义的保留字,不能用作变量名。

例如,`if`、`while`、`for`等是关键字。

6. 什么是运算符?举例说明一些C语言的运算符。

◆运算符用于执行各种数学和逻辑操作。

例如,+、-、*、/是算术运算符,==、!=、>、<是比较运算符。

7. 什么是条件语句?举例说明一个C语言的条件语句。

◆条件语句用于根据条件执行不同的代码块。

例如,`if`语句用于在条件满足时执行特定的代码块。

8. 什么是循环语句?举例说明一个C语言的循环语句。

◆循环语句用于多次执行相同的代码块。

例如,`for`循环用于按照特定条件重复执行代码块。

9. 什么是函数?如何声明和定义一个函数?◆函数是可重复使用的代码块,用于执行特定任务。

函数的声明包括函数返回类型、名称和参数列表,例如:`int add(int a, int b);`。

10. 什么是指针?如何声明和使用指针?◆指针是用于存储变量地址的变量。

指针的声明包括指针类型和名称,例如:`int *ptr;`。

要使用指针,可以使用`&`运算符获取变量的地址,使用`*`运算符访问指针指向的值。

11. 什么是C语言中的数组?◆数组是一种用于存储相同数据类型的元素集合的数据结构。

c语言面试题__指针篇

c语言面试题__指针篇

c语言面试题__指针篇c语言面试题__指针篇1. char * const p;char const * pconst char *p上述三个有什么区别?char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p; //和char const *p------------------------------------------------------2. char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char *str5 = "abc";const char *str6 = "abc";char *str7 = "abc";char *str8 = "abc";cout << ( str1 == str2 ) << endl;cout << ( str3 == str4 ) << endl;cout << ( str5 == str6 ) << endl;cout << ( str7 == str8 ) << endl;打印结果是什么?解答:结果是:0 0 1 1str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域-----------------------------------------------3. 以下代码中的两个sizeof用法有问题吗?void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母{for( size_t i=0; i<="str[i]" )="" )<="" ++i="" if(="" p="" sizeof(str[0]);="" str[i]<="z">str[i] -= ('a'-'A' );}char str[] = "aBcDe";cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;UpperCase( str );cout << str << endl;答:函数内的sizeof有问题。

C++的基本数据类型与存储形式

C++的基本数据类型与存储形式

C++的基本数据类型与存储形式程序设计中,"类型"是对数据的抽象。

类型相同的数据有相同的表示形式、存储格式以及相关的操作。

程序中使用的所有数据都必定属于某一种数据类型。

一、C++的数据类型图 1.1 C++的数据类型C++的数据类型可以分成简单类型,结构类型和指针类型。

二、数据存储所有信息在计算机中都是用0和1组成的代码存储的。

内存以字节为基本存储单位,1字节是8个二进制位。

定义一个变量时,计算机根据变量的类型分配存储空间,并以该类型解释存放的数据。

三、基本类型基本数据类型是语言系统预定义的,用户可以直接引用。

表 1 -1 C ++ 基本数据类型类型名说明字节示数范围,精度char 字符型 1 -128 ~127signed char 有符号字符型 1 -128 ~127unsigned char 无符号字符型 1 0 ~255short [int] 短整型 2 -32768 ~32767Signed short [int] 有符号短整型 2 -32768 ~32767unsignedshort [int] 无符号短整型 2 0 ~65535int 整型 4 -214748364~2147483647 signed [int] 有符号整型 4 -214748364~2147483647 unsigned [int] 无符号整型 4 0 ~4294967295ong [int] 长整型 4 -21474836~2147483647 signed long [int] 有符号长整型 4 -21474836~2147483647 unsigned long [int] 无符号长整型 4 0 ~4294967295float 单精度浮点型 4 -3.4 ×10 38 ~3.4 ×1038 ,约6 位有效数字double 双精度浮点型8 -1.7 ×10 308 ~1.7 ×10308 ,约12 位有效数字long double 长双精度浮点型8 -3.4 ×10 4932 ~1.1 ×104932 ,约15 位有效数字1、整型整型数可以用十进制、八进制和十六进制形式表示。

C语言的简答题含解答共100道题

C语言的简答题含解答共100道题

C语言的简答题含解答共100道题1. 什么是C语言?●C语言是一种通用的编程语言,由Dennis Ritchie于1972年开发。

它被广泛用于系统编程、嵌入式开发和应用程序开发。

2. C语言的注释如何表示?●注释可以使用`/*`和`*/`包围起来,或者使用`//`开始的单行注释。

3. 如何声明一个整数变量?●使用语法:`int variable_name;`,例如:`int age;`4. 如何将值赋给一个变量?●使用赋值运算符`=`,例如:`age = 25;`5. 什么是标识符?●标识符是用来命名变量、函数和其他用户定义的实体的名称,它们必须遵循一定的命名规则。

6. C语言的基本数据类型有哪些?●整数类型(int、short、long)、浮点数类型(float、double、long double)、字符类型(char)等。

7. 如何定义常量?●使用`#define`预处理指令或`const`关键字,例如:`#define PI 3.141592` 或`const int max_age = 100;`8. 什么是C语言中的运算符?●运算符用于执行各种操作,如加法、减法、乘法、除法等。

常见运算符包括`+`、`-`、`*`、`/`、`%`等。

9. 如何在C语言中获取用户输入?●使用`scanf`函数来接收用户输入,例如:`scanf("%d", &number);`10. 如何在C语言中打印输出?●使用`printf`函数来输出内容,例如:`printf("Hello, World!");`11. 什么是条件语句?C语言中最常见的条件语句是什么?●条件语句用于根据条件执行不同的代码块。

C语言中最常见的条件语句是`if`语句。

12. `if`语句的基本结构是什么?●`if`语句的基本结构如下:```cif (condition) {// 代码块}```13. 如何使用`else`扩展`if`语句以处理多个条件?●使用`else if`可以在一个`if`语句中处理多个条件,例如:```cif (condition1) {// 代码块1} else if (condition2) {// 代码块2} else {// 默认代码块}```14. 什么是循环?C语言中有哪些类型的循环?●循环是一种重复执行一段代码的结构。

const 的用法

const 的用法

const 的用法
const是一个在许多编程语言中都存在的关键字,用于声明一个常量,即一个数值在程序执行过程中不会发生变化的变量。

在许多编程语言中,使用const关键字声明的常量必须在声明时进行初始化,并且不能再次被赋值。

在C++、JavaScript、Java和许多其他编程语言中,const关键字用于定义常量。

在C++中,const可以用于声明常量,例如:
cpp.
const int MAX_VALUE = 100;
在这个例子中,MAX_VALUE被定义为一个常量,其数值为100,一旦声明后就不能再被修改。

在JavaScript中,const同样用于声明常量,例如:
javascript.
const PI = 3.14;
在这个例子中,PI被定义为一个常量,其值为3.14,一旦声明后也不能再被修改。

除了声明常量外,const还可以用于指针或引用类型的常量。

在C++中,可以使用const指针或指向常量的指针,以及const引用或指向常量的引用。

这些用法可以在程序中确保某些数据不会被修改,从而提高程序的安全性和可靠性。

总之,const关键字用于声明常量,可以帮助程序员在编写程序时更好地控制数据的不可变性,从而减少程序中的错误和提高代码的可维护性。

const指针用法

const指针用法

const指针用法一、基本语法```T某 const p; // 指针常量,指向类型为T的非常量对象,不允许更改指针的指向```二、指针类型的转换当一个指针类型被转换为const指针类型时,会带来一些语法和语义的变化。

例如,原本可读写的内存区域变成只读的,原本可以通过指针修改的属性和方法变成只读的等等。

这种类型转换通常是为了增强代码的安全性和可读性,防止错误地修改或删除某些重要的数据。

三、const指针的用途1.函数参数传递在函数参数传递时,const指针可以用来修饰函数参数,防止函数修改指针指向的数据。

例如:```C++void printData(const int某 data, int count)for (int i = 0; i < count; ++i)std::cout << data[i] << " ";}std::cout << std::endl;```2.类成员指针在类成员指针中,const指针可以用来定义只读的成员函数,防止函数修改对象成员的值。

例如:```C++class Personpublic:int age;std::string name;//定义只读成员函数int getAge( const { return age; }std::string getName( const { return name; }};int main。

Person p;p.age = 30; = "Tom";//定义只读的指针变量//访问对象成员std::cout << pPtr->getAge( << std::endl; // 输出:30std::cout << pPtr->getName( << std::endl; // 输出:"Tom"return 0;```3.常量数据当指针所指向的数据是一个常量时,需要用const指针来访问它,否则会编译错误或运行错误。

第五章_数组与指针习题

第五章_数组与指针习题

第五章数组与指针习题一、.基本概念与基础知识自测题5.1 填充题5.1.1 数组定义时有三个要素:数组名,数组元素的(1)和数组元素的(2)。

按元素在数组中的位置进行访问,是通过(3)进行的,称为(4)或(5)访问。

为了使数组声明中数组的大小修改更为方便,总是将(6)用于声明数组长度。

答案:(1)类型(2)数量(3)下标运算符(4)下标(5)索引(6)常变量5.1.2 C/C++中的多维数组用的是一个(1)的定义,即多维数组的基本定义是(2)构成的数组,三维数组的元素是(3)。

答案:(1)嵌套(2)以数组作为元素(3)二维数组5.1.3 计算机内存是一维编址的,多维数组在内存中的存储(1),C/C++多维在内存中的排列是(2)方式,即越(3)的下标变化(4)。

设数组a有m行n列,每个元素占内存u个字节,则a[i][j]的首地址为(5)+ (6)。

答案:(1)必须要转化为一维方式,(2)按行方式(3)右(4)越快(5)a数组的首地址(6)(i*n+j)*u5.1.4 对于多维数组,(1)的大小是确定的,所谓“不检查数组边界”只是不检查(2)的边界,而(3)的边界是在控制之中的,所以多维数组名作为函数的参数只可以(4)缺省。

答案:(1)较低各维的(2)最高维(第一维)(3)较低各维(4)最高维5.1.5 指针变量保存了另一变量的(1)值,不可以任意给指针变量赋一个地址值,只能赋给它(2)和(3)的地址。

使用变量名来访问变量,是按(4)来直接存取变量称为(5)方式;而借助指针变量取得另一变量的地址,访问该变量称为(6)方式。

答案:(1)地址(2)NULL(3)已经分配了内存的变量的地址(4)按变量的地址(5)直接访问(6)间接访问5.1.6 固定指向一个对象的指针,称为(1),即(2),定义时const放在(3)。

而指向“常量”的指针称为(4),指针本身可以指向别的对象,但(5),定义时const放在(6)。

C语言的简答题包含解答共70道题

C语言的简答题包含解答共70道题

C语言的简答题包含解答共70道题1. 什么是C语言?- C语言是一种通用的、高级的编程语言,由Dennis Ritchie于1972年开发。

它被广泛用于系统编程和应用程序开发。

2. C语言的特点是什么?- C语言具有高效性、可移植性和灵活性等特点。

3. 什么是C语言的注释符号?- C语言使用`//`表示单行注释,使用`/* */`表示多行注释。

4. 如何在C语言中声明一个整数变量?-使用如下语句:`int myVariable;`5. C语言的变量命名规则是什么?-变量名可以包含字母、数字和下划线,但必须以字母或下划线开头。

6. 如何给变量赋值?-使用赋值操作符`=`,例如:`myVariable = 10;`7. 如何在C语言中打印文本?-使用`printf()`函数,例如:`printf("Hello, World!\n");`8. 如何读取用户输入?-使用`scanf()`函数,例如:`scanf("%d", &myVariable);`9. 什么是数据类型?-数据类型定义了变量可以存储的数据种类和范围,如整数、浮点数、字符等。

10. 什么是`sizeof`运算符?- `sizeof`运算符用于获取数据类型或变量的字节数。

11. 什么是类型转换?-类型转换是将一个数据类型的值转换为另一个数据类型的过程。

12. 如何定义常量?-使用`#define`指令或`const`关键字来定义常量,例如:`#define PI 3.14159`或`const int MAX_VALUE = 100;`13. 什么是运算符?-运算符是用于执行各种操作的符号,如加法、减法、乘法等。

14. C语言中的算术运算符有哪些?-加法`+`、减法`-`、乘法`*`、除法`/`、取模`%`等。

15. 如何进行条件判断?-使用`if`语句,例如:`if (x > 10) { /* 代码块*/ }`16. 什么是循环?-循环是重复执行一组语句的控制结构。

C语言指针知识点总结

C语言指针知识点总结

C语⾔指针知识点总结1.指针的使⽤和本质分析(1)初学指针使⽤注意事项1)指针⼀定要初始化,否则容易产⽣野指针(后⾯会详细说明);2)指针只保存同类型变量的地址,不同类型指针也不要相互赋值;3)只有当两个指针指向同⼀个数组中的元素时,才能进⾏指针间的运算和⽐较操作;4)指针只能进⾏减法运算,结果为同⼀个数组中所指元素的下表差值。

(2)指针的本质分析①指针是变量,指针*的意义:1)在声明时,*号表⽰所声明的变量为指针。

例如:int n = 1; int* p = &n;这⾥,变量p保存着n的地址,即p<—>&n,*p<—>n2)在使⽤时,*号表⽰取指针所指向变量的地址值。

例如:int m = *p;②如果⼀个函数需要改变实参的值,则需要使⽤指针作为函数参数(传址调⽤),如果函数的参数数据类型很复杂,可使⽤指针代替。

最常见的就是交换变量函数void swap(int* a, int* b)③指针运算符*和操作运算符的优先级相同例如:int m = *p++;等价于:int m= *p; p++;2.指针和数组(1)指针、数组、数组名如果存在⼀个数组 int m[3] = {1,2,3};定义指针变量p,int *p = m(这⾥m的类型为int*,&a[0]==>int*)这⾥,其中,&m为数组的地址,m为数组0元素的地址,两者相等,但意义不同,例如:m+1 = (unsigned int)m + sizeof(*m)&m+1= (unsigned int)(&m) + sizeof(*&m)= (unsigned int)(&m) + sizeof(m)m+1表⽰数组的第1号元素,&m+1指向数组a的下⼀个地址,即数组元素“3”之后的地址。

等价操作:m[i]←→*(m+i)←→*(i+m)←→i[m]←→*(p+i)←→p[i]实例测试如下:1 #include<stdio.h>23int main()4 {5int m[3] = { 1,2,3 };6int *p = m;78 printf(" &m = %p\n", &m);9 printf(" m = %p\n", m);10 printf("\n");1112 printf(" m+1 = %p\n", m + 1);13 printf(" &m[2] = %p\n", &m[2]);14 printf(" &m+1 = %p\n", &m + 1);15 printf("\n");1617 printf(" m[1] = %d\n", m[1]);18 printf(" *(m+1) = %d\n", *(m + 1));19 printf(" *(1+m) = %d\n", *(1 + m));20 printf(" 1[m] = %d\n", 1[m]);21 printf(" *(p+1) = %d\n", *(p + 1));22 printf(" p[1] = %d\n", p[1]);2324return0;25 }输出结果为:(2)数组名注意事项1)数组名跟数组长度⽆关;2)数组名可以看作⼀个常量指针;所以表达式中数组名只能作为右值使⽤;3)在以下情况数组名不能看作常量指针:- 数组名作为sizeof操作符的参数- 数组名作为&运算符的参数(3)指针和⼆维数组⼀维数组的指针类型是 Type*,⼆维数组的类型的指针类型是Type*[n](4)数组指针和指针数组①数组指针1)数组指针是⼀个指针,⽤于指向⼀个对应类型的数组;2)数组指针的定义⽅式如下所⽰:int (*p)[3] = &m;②指针数组1)指针数组是⼀个数组,该数组⾥每⼀个元素为⼀个指针;2)指针数组的定义⽅式如下所⽰:int* p[5];3.指针和函数(1)函数指针函数的本质是⼀段内存中的代码,函数的类型有返回类型和参数列表,函数名就是函数代码的起始地址(函数⼊⼝地址),通过函数名调⽤函数,本质为指定具体地址的跳转执⾏,因此,可定义指针,保存函数⼊⼝地址,如下所⽰:int funcname(int a, int b);int(*p)(int a, int b) = funcname;上式中,函数指针p只能指向类型为int(int,int)的函数(2)函数指针参数对于函数int funcname(int a, int b);普通函数调⽤ int funcname(int, int),只能调⽤函数int func(int, int)函数指针调⽤ intname(*func)(int,int),可以调⽤任意int(int,int)类型的函数,从⽽利⽤相同代码实现不同功能,实例测试如下,假设有两个相同类型的函数func1和func2:1int func1(int a, int b, int c)2 {3return a + b + c;4 }56int func2(int a, int b, int c)7 {8return a - b - c;9 }普通函数调⽤和函数指针调⽤⽅式及结果如下所⽰1 printf("普通函数调⽤\n");2 printf("func1 = %d\n", func1(100, 10, 1));3 printf("func2 = %d\n", func2(100, 10, 1));4 printf("\n");56 printf("函数指针调⽤\n");7int(*p)(int, int, int) = NULL;8 p = func1;9 printf("p = %d\n", p(100, 10, 1));10 p = func2;11 printf("p = %d\n", p(100, 10, 1));12 printf("\n");需要注意的是,数组作为函数参数的时候,会变为函数指针参数,即:int funcname( int m[] )<——>int funcname ( int* m );调⽤函数时,传递的是数组名,即funcname(m);(3)回调函数利⽤函数指针,可以实现⼀种特殊的调⽤机制——回调函数。

15 指针高级应用

15 指针高级应用
在C语言中,一个二维数组可以看成是一个一维 数组,其中每个元素又是一个包含若干元素的一 维数组。
例如: int a[3][5]; a[0]、a[1]和a[2]分别是包含五个元素的一维数组名, 分别代表a数组元素的起始地址(即a[0]是第0行元素的 首地址, a[1]是第1行元素的首地址)。 a[i]和*(a+i)(无条件等价)都是第i行第0列元素的地址, 那么a[i]+j、*(a+i)+j、&a[0][0]+5*i+j都是第i行第j列元素 的地址。
8
数组作参数传递
一维数组元素作参数传递时,按值传递 整个数组(数组名)当参数传递时,按地址传递, 有以下三种等价的写法:
void TestArray(char ary[ ]); void TestArray(char ary[ LEN]); void TestArray(char *ary);
9
数组作为返回值
按地址传递
指针可以作为参数 把实参的地址传给形参 允许函数访问内存位置 被调函数能够修改主调程序的参数的值 定义 getstr(char *ptr_str, int *ptr_int); 使用 getstr(pstr, &var);
7
按地址传递示例
#include <stdio.h> void swap(int *x, int *y); void main() { int a, b; a = 10; b = 20; swap(&a, &b); printf(“a=%d,b=%d” ,a,b); } void swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; }

C++面试常见问题

C++面试常见问题

C++⾯试常见问题指针和引⽤的区别指针是⼀个变量,存储的是⼀个地址,引⽤跟原来的变量实质上是同⼀个东西,是原变量的别名指针可以有多级,引⽤只有⼀级指针可以为空,引⽤不能为NULL且在定义时必须初始化指针在初始化后可以改变指向,⽽引⽤在初始化之后不可再改变sizeof指针得到的是本指针的⼤⼩,sizeof引⽤得到的是引⽤所指向变量的⼤⼩当把指针作为参数进⾏传递时,也是将实参的⼀个拷贝传递给形参,两者指向的地址相同,但不是同⼀个变量,在函数中改变这个变量的指向不影响实参,⽽引⽤却可以。

引⽤只是别名,不占⽤具体存储空间,只有声明没有定义;指针是具体变量,需要占⽤存储空间。

引⽤在声明时必须初始化为另⼀变量,⼀旦出现必须为typename refname &varname形式;指针声明和定义可以分开,可以先只声明指针变量⽽不初始化,等⽤到时再指向具体变量。

引⽤⼀旦初始化之后就不可以再改变(变量可以被引⽤为多次,但引⽤只能作为⼀个变量引⽤);指针变量可以重新指向别的变量。

不存在指向空值的引⽤,必须有具体实体;但是存在指向空值的指针。

堆和栈的区别申请⽅式不同:栈由系统⾃动分配;堆是⾃⼰申请和释放的。

申请⼤⼩限制不同:栈顶和栈底是之前预设好的,栈是向栈底扩展,⼤⼩固定,可以通过ulimit -a查看,由ulimit -s修改;堆向⾼地址扩展,是不连续的内存区域,⼤⼩可以灵活调整。

申请效率不同:栈由系统分配,速度快,不会有碎⽚;堆由程序员分配,速度慢,且会有碎⽚。

区别以下指针类型int *p[10]int (*p)[10]int *p(int)int (*p)(int)int *p[10]表⽰指针数组,强调数组概念,是⼀个数组变量,数组⼤⼩为10,数组内每个元素都是指向int类型的指针变量。

int (*p)[10]表⽰数组指针,强调是指针,只有⼀个变量,是指针类型,不过指向的是⼀个int类型的数组,这个数组⼤⼩是10。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.char const * p ,char * const p,char const * const p的区别
常量指针、指针常量、指向常量的指针常量
例程:
xiajiashan@ubuntu:~/linxun/pointer_const$ cat -n pointer.c
1 #include <stdio.h>
2
3 int main(void)
4 {
5 unsigned int a = 9;
6
7 unsigned int const *p1;//常量指针,谁在前,先读谁,const在前
8 unsigned int * const p2;//指针常量,谁在前,先读谁,*在前,先读指针
9
10 p1 = &a; //p1是常量指针,即p1指向一个常量,p1可变,但*p1不可变。

11 *p1 = a; //*p1在定义的时候系统已经分配了值,这里再赋值编译出错
12 p2 = &a; //p2是指针常量,地址不能变,即p2不可变,但*p2可变
13 *p2 = a; //
14
15 printf("p1 = 0x%p\n",p1);
16 printf("*p1 =0x%x\n",*p1);
17
18 printf("p2 = 0x%x\n",(unsigned int const)p2);
19 printf("*p2 =0x%x\n",*p2);
20 }
xiajiashan@ubuntu:~/linxun/pointer_const$ gcc pointer.c
pointer.c: In function ‘main’:
pointer.c:11:5: error: assignment of read-only location ‘*p1’
pointer.c:12:5: error: assignment of read-only variable ‘p2’
xiajiashan@ubuntu:~/linxun/pointer_const$
这里,printf("p1 = 0x%p\n",p1);//用%p是打印指针,即地址,如果用%x将有警告。

printf("p2 = 0x%x\n",(unsigned int const)p2); //强转成unsigned int const避免警告,因为%x 默认是unsigned int类型。

相关文档
最新文档