1、有趣的指针

el/2024/3/2 10:41:24

1、今天发现指针数组一个有趣的现象,众所周知,数组是基于指针而生成的,故指针和数组是可以进行相互转换,如下所示:

int num[20];
num[1] = *(num+1);

但指针和数组还是存在不同点,其中之一便是指针名称是变量而数组名称是常量:

int num[20];
int* num1  = num;
num += 1 ; // 无效,因为数组名称是常量,不允许修改。
num1 += 1 ; //有效,且指针指向num[1]

2、指针数组和数组的名称均代表第一个元素的首地址,并且带引号的字符串其也代表首地址

char ch[20] = "Lebron James"; // ch 代表 L字符的地址
char* ch1 = "Kyrie Irvring";   // ch1 代表K字符的地址 ,因为引号代表首地址,故可以将指针赋值。

3、使用cout 输出int 类数组名称得到的是首个int元素的地址,但使用cout输出char类数组名称得到的是整个char数组的元素直到遇到'\0'为止。若我们想通过char数组名输出,数组首字符所处的位置,则可以使用强制转换(int *)

int num[20] = {1,2,3,....};
char ch[20] = "tiger." ;
cout << " num =  " << num << endl ; // 输出地址 如 0x .....
cout << " ch  =  " << ch  << endl ; // 输出字符串tiger.
cout << " ch at  " << (int *)ch  << endl ; // 输出字符t的地址

为什么会出现输出数组名,而最终输出其存储的字符串呢,这是因为编译器会留出空间将每个被存储的字符串和其地址进行关联。


http://www.ngui.cc/el/3574164.html

相关文章

自动存储、静态存储、动态存储

自动存储 在函数内部定义的常规变量使用自动存储空间&#xff0c;被称为自动变量&#xff08;automatic variable&#xff09;&#xff0c;意味着它们所属的函数被调用时自动产生&#xff0c;在该函数结束时消亡。 自动变量是一个局部变量&#xff0c;其作用域为包含它的代码…

continue在while和for循环中的区别

二刷primerPlus的时候发现了一个很有趣的细节&#xff0c;大家都知道continue的作用是跳过本次循环的剩余部分而直接开启下次循环。那么在for循环中&#xff0c;continue将跳转到更新表达式&#xff0c;然后跳到测试表达式处。而在while循环中&#xff0c;continue将直接跳转到…

读取数字循环

int n ; cin >> n; 总所周知&#xff0c;这段代码为输入一个整数&#xff0c;假设我输入了字符q那么结果又会如何呢&#xff1f;这种类型不匹配的情况将发生4种情况&#xff08;同时发生&#xff09;&#xff1a; n的值保持不变&#xff1b;不匹配的输入将被留住输入队…

函数递归(浅)

函数递归即函数自己调用自己&#xff0c;注意在C中不允许&#xff0c;main()进行递归。 那有同学就会问&#xff0c;函数的递归这不就陷入了死循环嘛&#xff1f;答案是对的&#xff01;因此我们需要给定一个判定条件&#xff0c;迫使调用链断裂&#xff0c;例如void类型的递归…

成员函数的内联方法

定义于类声明中的成员函数都将自动成为内联函数&#xff0c;类声明中常将短小的函数作为内联函数&#xff0c;也就是说在下面代码中set_tot()函数为内联函数。 class A {private:int a;int b ;public :int set_tot() {return a*b;} } 这段代码同理于下段代码&#xff1a; cl…

类作用域常量

在创建类作用域内的常量时&#xff0c;你可能以为这样可行&#xff1a; class A { private: const int Months 12 ; double consts[Months] ; } 其实这是个错误用法&#xff0c;因为类只是提供对象的创建方式&#xff0c;并不能创建对象&#xff0c;因此在A对象没有被…

作用域内枚举

传统的枚举&#xff0c;其中两个枚举中定义的枚举量可能会发生冲突。假设有一个处理鸡蛋和T恤的项目&#xff0c;其中包含类似的代码。 enum egg {small,medium,large,jumbo} enum t_shirt{small,medium,large,jumbo} 这将无法通过编译&#xff0c;因为egg中的small 和 t_shi…

自建类的赋值问题

潜复制和深复制以及复制构造函数_努力的小带土的博客-CSDN博客续潜复制及复制构造函数。 关于自建类的赋值问题假设存在类Tperson&#xff0c;如下所示&#xff1a;(主要用到的成员变量为_name 和address&#xff09; class Tperson { private: char* _name ; char* address …

抽象类(简单描述)

使用一个通俗且易理解的方法来讲纯虚类&#xff0c;假设有鸟类&#xff0c;该类有个属性是鸟会飞&#xff0c;企鹅也属于鸟类&#xff0c;但企鹅不会飞&#xff0c;那我们不想在企鹅内部继承与飞相关的属性。在比如圆和椭圆&#xff0c;在数学定义中圆是属于特殊的椭圆&#xf…

使用using重新定义访问权限

在使用保护派生和私有派生时&#xff0c;基类的公有成员函数&#xff0c;将成为保护成员或私有成员。假设要让基类方法在派生类外可用&#xff0c;则此时就用到了using重新定义访问权限&#xff0c;假设存在以下类&#xff1a; class Student : private string, private valar…