一、布爾數據類型:
在c語言里面我們知道是沒有布爾數據類型的,而在C++中添加了布爾數據類型(bool),它的取值是:true或者false(也就是1或者0),在內存大小上它占用一個字節大小:
1、bool類型只有true(非0)和false(0)兩個值。
2、C++編譯器會將非0值轉換為true,0值轉換為false。
#include <stdio.h>
int main(int argc, char *argv[])
{
bool b = false;
int a = b;
printf("sizeof(b) = %d", sizeof(b));
printf("b = %d, a = %d", b, a);
b = 3;
a = b;
printf("b = %d, a = %d", b, a);
b = -5;
a = b;
printf("b = %d, a = %d", b, a);
a = 10;
b = a;
printf("a = %d, b = %d", a, b);
a = 0;
b = a;
printf("a = %d, b = %d", a, b);
return 0;
}
演示結果:
root@txp:/home/txp# ./a.out
sizeof(b) = 1
b = 0, a = 0
b = 1, a = 1
b = 1, a = 1
a = 10, b = 1
a = 0, b = 0
2、C++中的三目運算符:
對三目運算符,想必大家都再熟悉不過了,不過在c++中的三目運算符的用法就比c語言更加高級了,來先看一個示例:
int a = 1;
int b = 2;
( a < b) ? a : b = 3;
printf("a=%d,b=%d",a,b);
上面的三目運算符語句看起來怎么有點奇怪,它作為左值了,一般在c語言里面它應該是作為右值賦值給一個變量的,那這樣寫在c++中有沒有錯誤,答案肯定是沒有錯的,我們還是來看一下這種寫法在c語言中報了啥錯誤:
root@txp:/home/txp# gcc test.c
test.c: In function ‘main’:
test.c:7:21: error: lvalue required as left operand of assignment
( a < b) ? a : b = 3;
這里我們可以發現它不能做為左值來對它進行賦值,而我們在c++編譯器里面來編譯,很明顯它是沒有錯誤的,行的通,那我們再來修改一下:
#include <stdio.h>
int main(void)
{
int a = 1;
int b = 2;
( a < b) ? a : 4 = 3;
printf("a=%d,b=%d",a,b);
}
編譯結果(這個錯誤和在c語言里面一樣,注意這里我是在C++編譯器里面編譯,只是把三目運算符里面修改了一下。):
root@txp:/home/txp# g++ test1.cpp
test1.cpp: In function ‘int main()’:
test1.cpp:7:23: error: lvalue required as left operand of assignment
( a < b) ? a : 4 = 3;
^
小結:
1、c語言里面的三目運算符返回的是變量值,它不能作為左值來使用。
2、c++中的三目運算符可以直接返回變量本身,既可以作為右值使用,也可以作為左值來使用。
3、c++中的三目運算符可能返回的值中如果有一個是常量值,則不能作為左值進行使用,這點要切記和理解。
二、C++中的引用:
1、引用的概念:
--引用可以看作一個已定義變量的別名
--引用的語法:Type &name = var;這里舉個簡單的示例:
int a =4;
int& b =a; //b為a的別名
b = 5;//操作b就是操作a
--注意普通引用在定義時必須用同類型的變量進行初始化。
下面是demo演示:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 4;
int& b = a;
b = 5;
printf("a = %d", a);
printf("b = %d", b);
printf("&a = %p", &a);
printf("&b = %p", &b);
return 0;
}
演示結果:
root@txp:/home/txp# ./a.out
a = 5
b = 5
&a = 0x7fff408ffdec
&b = 0x7fff408ffdec
-
可編程邏輯
+關注
關注
7文章
514瀏覽量
44074 -
C++
+關注
關注
22文章
2104瀏覽量
73504
發布評論請先 登錄
相關推薦
評論