C/C++小知识 日常更新

1、 “->” 是和指针连用的 也就是“->”前面是一个内存地址 比如this指针
用于结构体取出结构体中的数据和取类中数据

class student
{
public:       
string name[20];
}

student *xy;//访问时需要写成 *xy.name="hhhhh";等价于 xy->name="hhhhh"。
student xy;//访问时需要写成 xy.name="hhhhh"

2、“[ ]”表示取地址中的值 “[ ]”中可以+数字来偏移

 int a[10];
 a[0]=1;//a表示首地址 [0]表示不偏移 也就是取首地址的值
 a[1]=2;//a偏移 1*sizeof(int)  也就到了a[1]的地址

3、
字符数组中为什么能用变量名输出其余全部字符

char a[] = "1234567";
cout<<a<<" "<<a+1<<endl;

因为 char 型数组中的每一个元素都是一字节,所以每一个字符之间的地址都是 +1 的是连续的,所以当 cout 输出时读到字符数组中的 \0 便停止输出; 而有时候由于编译器多分配空间的原因导致出现乱码。当分割一个字符串变成两个时候 需要给第一个后面加上\0

4、类模板一般将类的声明与定义放在一个文件中 并且取名为.hpp 如果不在同一个文件 主函数文件中应该调用类的cpp文件 调用h文件将出错 类模板根据调用的T不同 在使用时内部生成多个类 一样的T共用同一个类 所以一样的T共用同一个static变量 不同的T则不共用

5、int* p [2]; 是定义了搁指针数组 p[0] p[1]
int (*p)[2]; 则可看成开两个int大小的空间 让p指向这整个空间

6、右值引用&& 也可以const &
int fun(int &&a) 或者 int fun(const &a)都能传参为常量如 fun(2)
传引用比传值快 也就是上面两个写法比 fun(int a)快

7、指针修改const变量

#include <iostream>
int main()
{
   const volatile int a=10; //volatile 禁止编译器优化 
   int *P=(int*)&a; 
   *P=12;
   std::cout<<a;
   return 0;
}

输出 12

8、

	char arr1[5]={'a','b','c','d','e'}; //长度5 
	char arr2[6]={"abcde"};   		    //以\0结尾 长度6 
	//arr[0]='A';   报错因为arr2指向的是一个常量区 
	char arr3[]={'a','b','c','d','e'};  //长度5 
	char arr4[]="abcde";      			//以\0结尾  长度6 
	const char *arr5="abcde";  /* 这玩意查了下没办法获取他的长度 
						猜测应该也是6吧(arr5是指针 sizeof()只能得到指针大小4)*/
	printf("arr1:%d  arr2:%d  arr3:%d  arr4:%d  arr5:%d",
		sizeof(arr1),sizeof(arr2),sizeof(arr3),sizeof(arr4));									

在这里插入图片描述
9、

	string str = "abc";
	cout << (int*)str.c_str() << endl;
	char& addr0 = str[0];

	str = "pppppppppppppppppppppppppppppppppp";
	cout<<addr0<<endl;
	cout << (int*)str.c_str() << endl;
	//addr0 = 'A';
	cout << str;

输出
在这里插入图片描述
原因
在重新赋值时候给str2的字符串重新分配了空间 并释放了str1的空间 导致addr0指向了以前的字符串处于的空间即无效地址 (vs2019中测试 devc或其他版本可能不一样)
提醒:vector类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值