指针数组

C++之指针与数组区别

点点圈 提交于 2019-11-27 10:05:32
C++/C程序中,数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。 下面以字符串为例比较指针与数组的特性。 一、修改内容 1 char a[] = “hello”; //“hello”位于常量存储区,a在全局(静态)初始化区 2 a[0] = ‘X’; 3 cout << a << endl; 4 char *p = “world”; // 注意p指向常量字符串 p位于全局(静态)初始化区 5 p[0] = ‘X’; // 编译器不能发现该错误 常量字符串的内容是不能被修改的 6 cout << p << endl; 二、内容复制与比较 1 // 数组… 2 char a[] = "hello"; //a在全局(静态)初始化存储区 “hello”在常量存储区 3 char b[10]; //b在全局(静态)未初始化存储区 4 strcpy(b, a); // 不能用 b = a; 5 if(strcmp(b, a) == 0) // 不能用 if (b == a) 6 … 7 // 指针… 8 int len = strlen(a); 9 char *p =

c语言面试题__指针篇

心不动则不痛 提交于 2019-11-27 09:41:52
文章转载自: http://www.pythonheidong.com/blog/article/2541/ 1. char * const p;   char const * p   const 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

函数指针数组的最佳实践

▼魔方 西西 提交于 2019-11-27 08:45:26
1 #include<iostream> 2 #include<fstream> 3 #include<string.h> 4 using namespace std; 5 6 class Student; 7 8 typedef void(CALL)(Student*,int); 9 10 class Student 11 { 12 public: 13 string name; 14 int age; 15 char sex; 16 public: 17 Student(){} 18 ~Student(){} 19 }; 20 21 void write_object(Student *students,int size) 22 { 23 ofstream ofs("text.bat"); 24 if(ofs) 25 { 26 for(int i=0;i<size;i++) 27 { 28 cin>>students[i].name>>students[i].age>>students[i].sex; 29 ofs.write(reinterpret_cast<const char*>(&students[i]),sizeof(students[i])); 30 } 31 } 32 else 33 { 34 cout<<"write failed"<<endl; 35 } 36

c++ 指针(一)

强颜欢笑 提交于 2019-11-27 05:35:11
指针 每一个变量都有一个内存位置 ,每一个内存位置都定义了可使用连字号( & )运算符访问的地址,它 表示了在内存中的一个地址 #include <iostream> using namespace std; int main () { int var1; char var2[10]; cout << "var1 变量的地址: "; cout << &var1 << endl; cout << "var2 变量的地址: "; cout << &var2 << endl; return 0; } 结果: var1 变量的地址: 0xbfebd5c0 var2 变量的地址: 0xbfebd5b6 一、定义 指针是一个变量,其值为另一个变量的地址 ,即, 内存位置的直接地址 。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。 type *var-name; 星号是用来指定一个变量是指针 int *ip; /* 一个整型的指针 */ double *dp; /* 一个 double 型的指针 */ float *fp; /* 一个浮点型的指针 */ char *ch; /* 一个字符型的指针 */ 所有 指针的值的实际数据类型 ,不管是整型、浮点型、字符型,还是其他的数据类型, 都是一样的,都是一个代表内存地址的长的十六进制数 。

数据结构与算法—线性表详解

久未见 提交于 2019-11-27 05:01:25
前言 通过前面 数据结构与算法前导 我么知道了数据结构的一些 概念和重要性 ,那么我们今天总结下线性表相关的内容。当然,我用 自己的理解解 分享给大家。 其实说实话,可能很多人依然 分不清 线性表,顺序表,和链表 之间的 区别和联系 ! 线性表 : 逻辑结构 , 就是对外暴露数据之间的关系,不关心底层如何实现。 顺序表、链表 : 物理结构 ,他是实现一个结构实际物理地址上的结构。比如顺序表就是用 数组 实现。而链表用 指针 完成主要工作。不同的结构在不同的场景有不同的区别。 对于java来说,大家都知道 List 接口类型,这就是逻辑结构,因为他就是封装了一个线性关系的一系列方法和数据。而具体的实现其实就是跟物理结构相关的内容。比如顺序表的内容存储使用数组的,然后一个get,set,add方法都要 基于数组 来完成,而链表是基于 指针 的。当我们考虑对象中的数据关系就要考虑 指针 的属性。指针的指向和value。 下面用一个图来浅析线性表的关系。可能有些不太确切,但是其中可以参考,并且后面也会根据这个图举例。 线性表基本架构 对于一个 线性表 来说。 不管 它的 具体实现 方法如何,我们应该有的 函数名称 和 实现效果 应该一致。你也可以感觉的到在一些结构的设计。比如List的 Arraylist 和 LinkedList

c++指针,指向内存空间

半城伤御伤魂 提交于 2019-11-27 04:53:38
指针指向的是地址 ,如果是数组的话,是指向数组的首地址 2.pTemp=new double[nSize]表示指针pTemp指向一个新开辟的数组的首地址,该数组为double类型,长度为nSize. 来源: https://blog.csdn.net/qq_41472037/article/details/99413423

函数指针数组举例

时间秒杀一切 提交于 2019-11-27 03:56:57
函数指针数组举例 1、指针函数:是指函数返回值是一个指针(返回一个地址,多为数组首地址)的函数。 基本用法:返回值类型 * 函数名(参数表)。如int* xq(int n){} (还有两种写法基本等效:int * xq(int n){}和int *xq(int n){},后两种写就是*前后的空格问题) 例:今天是星期天,输入一个整数n,那n天后是星期几? #include<iostream> using namespace std; int a[]={7,1,2,3,4,5,6}; int * xq(int); int main(){ int n,*p; cin>>n; p=xq(n%7); cout<<a<<' '<<*p; return 0; } int* xq(int x){return a+x;} View Code 2、函数指针:是一个指向函数的指针。 基本用法:返回值类型 (*函数名)(参数表)。如int (*xq)(int n) 例:今天是星期天,输入一个整数n,那n天后是星期几? #include<iostream> using namespace std; int a[]={7,1,2,3,4,5,6}; int xq(int); int main(){ int n; int (*p)(int); cin>>n; p=xq; cout<<a<<' '<<p(3);

JAVA创建数组对象出现空指针

只愿长相守 提交于 2019-11-27 03:40:30
在创建数组对象时,通常仅仅使用了创建数组, 而没有对每一个ball对象实例化(对于每一个对象而言,地址为null) public class ball { boolean right = true; boolean left = false; int potion = 0; ball(){ right = true; left = false; potion = 0; } ball[] Y = new ball[n]; for (int i = 0;i < n;i++){ Y[i] = new ball(); }对每一个对象单独实例化,就不会有这样的问题了 来源: https://www.cnblogs.com/SGRS/p/11342296.html

C语言的灵魂——指针基础

血红的双手。 提交于 2019-11-27 03:32:21
一、什么是指针 1、指针的定义:地址形象化为指针,通过指针能够找到内存单元。         指针变量就是地址变量,变量的值为指针。 指针其实是我们将变量名和地址的关系显化(独立)出来的一种形式,是为了我们更加方便的读取数据和进行操作而设计的,是c语言的灵魂。 解释: int a; printf("%d,a"); 如上,我们通常是通过变量名来引用变量的值,如上面的 printf( " %d,a "); 一句,我们就是通过引用a的变量名来输出变量a的值。 为了理解上述的概念,我们必须理解这两个概念: 存储单元的地址  系统分配地址  类似于房间号 存储单元的内容  自定义内容   类似于房间里的人 2、常用的两种访问方式 直接访问  间接访问 int a; a = 3; //直接访问 printf("%d,a"); //间接访问 int *a_pointer; a_pointer = &a; printf("%d,*a_pointer"); 直接访问就是通过变量名进行访问,间接访问就是通过指针进行访问。 二、指针变量 定义:存放地址(指针)的变量。 1、定义指针变量 方式:类型名 *指针变量名 int *p;// int——基类型,不可少 基类型用来指定此类指针变量可以指向的变量类型。如上面的p指针只可以用来指向整数类型的变量。 Zu

c语言深度剖析(29)—指针和数组分析(下)

耗尽温柔 提交于 2019-11-27 02:49:10
问题:数组名可以当作指针常量使用,那么指针是否也可以当作数组来使用呢? 通过下标的形式访问数组中的元素 int main() { int a[5] = {0}; a[1] = 3; a[2] = 5; return 0; } 通过指针的形式访问数组中的元素 int main() { int a[5] = {0}; *(a + 1) = 3; *(a + 2) = 5; return 0; } 1. 下标形式VS指针形式 指针以固定增量在数组中移动,效率高于下标的形式; 指针增量为1,且硬件具有硬件增量模型时,效率更高; 下标形式与指针形式的转换: a[n] <==> (a + n) <==> (n + a) <==> n[a] note: 现代编译器的生成代码优化率已大大提高,在固定增量时,下标形式的效率已经和指针形式的相当;但从代码可读性和代码维护性的角度来看,下标形式的更优。 #include <stdio.h> int main() { int a[5] = { 0 }; int *p = a; int i = 0; for (i = 0; i < 5; i++) { p[i] = i + 1; // 将指针当做数组名来使用 } for (i = 0; i < 5; i++) { printf("a[%d] = %d\n", i, *(a + i)); } printf("