你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

C++——布尔数据类型(bool)及引用

[复制链接]
gaosmile 发布时间:2020-6-22 20:50
一、布尔数据类型:
在c语言里面我们知道是没有布尔数据类型的,而在C++中添加了布尔数据类型(bool),它的取值是:true或者false(也就是1或者0),在内存大小上它占用一个字节大小:

4 d3 h! v- w, S0 s9 y9 ?7 g) N* c1、bool类型只有true(非0)和false(0)两个值。2 }! m+ e. K, w" h/ t
2 k# V5 H' @: [: v) O: N
2、C++编译器会将非0值转换为true,0值转换为false。8 x; q+ T3 [7 B% q; A$ e
& r$ k, R1 K) o2 J
#include <stdio.h>7 P. ]/ l- Y" _1 [% g" t
: r! `4 F/ R/ o, m+ j' k7 V! H2 N
int main(int argc, char *argv[])3 ^2 L' b. X! e2 s$ s
{
; p$ Q0 Y) d! \, V8 H8 W    bool b = false;& W) j7 B  L# K1 ]0 {
    int a = b;
4 O( j8 j! I1 e7 w- K) g9 S' {   
( w# l0 ?8 j3 g/ g5 y  |    printf("sizeof(b) = %d\n", sizeof(b));
" F1 N+ M! Q/ ^  d    printf("b = %d, a = %d\n", b, a);
& |( b% M9 U+ c2 b8 ~    / `/ ]/ ]% z) |" X! D
    b = 3;  l5 a9 ]6 s7 j. ^
    a = b;
" K$ j. I0 x* v8 C0 _4 @    + V. m4 E2 P! x6 [8 d* Z) T
    printf("b = %d, a = %d\n", b, a);
( `7 Q1 D4 h- B. Q    4 t2 _4 I. A; J. L
    b = -5;7 |1 q% Z  L- l& `* H6 k
    a = b;
, G7 ?, }4 X7 w: h9 J6 p" Q* I8 b    1 s( f; b( j, s- P
    printf("b = %d, a = %d\n", b, a);
6 I; A7 u) u1 W8 w" |/ Q    - n1 @6 r$ G7 w5 O) r) u
    a = 10;; C( m  z* ~- t7 i' `! C
    b = a;- G7 u% ?: e4 P: n$ O5 L7 j
   
# p- j  X3 I9 V4 n    printf("a = %d, b = %d\n", a, b);4 x6 M1 Z; r: z
   
5 L+ {* x3 ~$ H2 W4 i2 |  {! L, }    a = 0;& d% U4 G- b% i! q" `
    b = a;
: u5 }# x- B$ ^1 a  g$ ^" F   
! V& Y  y$ a' d/ T    printf("a = %d, b = %d\n", a, b);
* _2 b  R/ o/ G8 C    0 a# ^3 R) E" B
    return 0;3 ], t+ y# j* z4 f& e  H
}
2 T& W2 {  A# Y1 @0 v' t' w  L/ \; d
4 j' p" y9 l. Z$ h; |
演示结果:
root@txp:/home/txp# ./a.out- S3 s* h2 d& w
sizeof(b) = 1
1 o  E8 t. A' U; l2 z/ \b = 0, a = 0; x) m: s6 l0 V% x9 D  `$ h
b = 1, a = 1" }' b/ x1 [  Y2 |$ ?( D/ T
b = 1, a = 1
" a: x# {" [. [. Ba = 10, b = 1
3 a& d4 T7 G8 r' ta = 0, b = 0
) p) D% K0 O6 T9 U  m0 g
) }7 p0 C: @. u5 S, W
2、C++中的三目运算符:
对三目运算符,想必大家都再熟悉不过了,不过在c++中的三目运算符的用法就比c语言更加高级了,来先看一个示例:
, j8 v: n4 j/ |7 }1 i3 U
int a = 1;4 C" n/ Q+ f* Y4 \0 l1 C( R
int b = 2;; O" i1 H: P9 m9 O/ {2 d
" y3 k0 d, r+ K1 S9 }
( a < b) ? a : b = 3;1 G# \1 S/ `- U

& @- [9 g1 l( o+ B" X( Vprintf("a=%d,b=%d\n",a,b);8 T, e' V' e5 e* T
5 D" n% Q% P5 P# k9 Z* k3 i) k
上面的三目运算符语句看起来怎么有点奇怪,它作为左值了,一般在c语言里面它应该是作为右值赋值给一个变量的,那这样写在c++中有没有错误,答案肯定是没有错的,我们还是来看一下这种写法在c语言中报了啥错误:
root@txp:/home/txp# gcc test.c+ M& Q( c6 j( g' _$ v3 J% L; G* D
test.c: In function ‘main’:
) x8 p# p4 P9 W- w) C8 P. ?test.c:7:21: error: lvalue required as left operand of assignment# b# V6 x7 W4 {: T
    ( a < b) ? a : b = 3;
1 x. Q6 M9 t7 }
+ F4 J# O' x: f) w( z" x  i: o  @
这里我们可以发现它不能做为左值来对它进行赋值,而我们在c++编译器里面来编译,很明显它是没有错误的,行的通,那我们再来修改一下:
#include <stdio.h>9 a0 ^2 C. T1 H$ A7 X' ?
int main(void)
5 A, l2 w1 }: ?. ]( U! G+ ?{7 [9 I9 h5 I5 ~+ W% b; c

4 w% ]8 l9 w  p6 e: Q   int a = 1;. x8 ?' m( L7 |; Q0 U( Q
   int b = 2;+ E7 D4 \8 v' O9 ]& a
   ( a < b) ? a : 4 = 3;
! h* J6 X. p2 ^  N# _9 N8 g8 U$ D4 l0 Y
   printf("a=%d,b=%d\n",a,b);1 Q  u+ U. y5 W5 l; K

& D2 b8 H$ Y7 a6 K* b: ^}
0 O6 p1 b: i$ }( a0 q+ u) T7 t3 S, d- H" g- W

7 f" q; }8 P* n3 K9 c) @5 j
编译结果(这个错误和在c语言里面一样,注意这里我是在C++编译器里面编译,只是把三目运算符里面修改了一下。):
root@txp:/home/txp# g++ test1.cpp& @1 c  Y) D+ o$ {% l% @$ q! o
test1.cpp: In function ‘int main()’:5 i" {5 D: j7 m( h
test1.cpp:7:23: error: lvalue required as left operand of assignment; m1 E4 w  y+ `/ r8 t
    ( a < b) ? a : 4 = 3;* G# V- }8 X3 ^; @4 S& d0 B
                       ^
' N- b; W/ k( w5 R( A
小结:
1、c语言里面的三目运算符返回的是变量值,它不能作为左值来使用。
2、c++中的三目运算符可以直接返回变量本身,既可以作为右值使用,也可以作为左值来使用。
3、c++中的三目运算符可能返回的值中如果有一个是常量值,则不能作为左值进行使用,这点要切记和理解。
二、C++中的引用:
1、引用的概念:
--引用可以看作一个已定义变量的别名
--引用的语法:Type &name = var;这里举个简单的示例:
int a =4;- I& _4 g6 k) i7 i  \& o0 |( n! P* U
int& b =a; //b为a的别名
3 Z9 X& M+ b3 \' P% I% z( i b = 5;//操作b就是操作a

: u9 N- U2 u2 k2 v6 d
--注意普通引用在定义时必须用同类型的变量进行初始化。
下面是demo演示:
#include <stdio.h>$ b5 G& r5 Z7 t' _

0 W2 K- X, x) k8 rint main(int argc, char *argv[])$ s* l. n: [9 R4 k2 w& W* K+ _
{3 \! x8 L: J0 J
    int a = 4;' `. ?- W8 ?, L7 a" Q* v( d) A
    int& b = a;
3 {( T$ d; g; ?: K2 ~4 e' g* B   
% {1 X7 i; [. q) c9 C    b = 5;8 Z. @" M. p+ z0 Y
    2 _4 m' x* F9 _' F5 B, j
    printf("a = %d\n", a);
6 @3 A: g( y* U( j0 `6 j/ N    printf("b = %d\n", b);. g  P* x) h& i, G- u" m
    printf("&a = %p\n", &a);2 s# e% Z9 r+ y8 Q1 S" O
    printf("&b = %p\n", &b);
: {& a: I( l- Z: n5 [# {/ Y    2 ]( m" m+ q0 P
    return 0;
" d, T# n5 N* s; y}$ @: R, r& ^; H: f- q8 t6 t

% E% E6 C! y" V
演示结果:
root@txp:/home/txp# ./a.out9 m  m4 M) R4 W' J, U' R4 I
a = 5
* i6 e9 K+ I" L$ N: z: Db = 5
2 T4 L- J6 r3 L6 O9 `# Y&a = 0x7fff408ffdec: A2 x, e4 ?" L0 M* p
&b = 0x7fff408ffdec' O+ c" ~1 D' A+ R8 c- B; h

) u9 ~+ `2 m# J3 ?( l( p! I" f
2、引用的意义:
--引用作为变量名而存在,因此在一些场合可以代替指针。
--引用相对于指针来说具有更好的可读性和实用性。
下面举个经典的例子来对比一下:
(1)引用方式:
#include <stdio.h>
4 n- m6 T2 L+ B& O
. `$ Z; q* b' U1 Xvoid swap(int& a,int& b)% N5 ~2 a. I5 J/ d: G1 ?. R
{
: ?$ {8 V9 G* K+ O! q' r3 n( w   int t = a;
' J* F6 I: Z% j   a=b;
- M# p; _, @  v4 |- A1 R   b=t;* Z1 N, w! d' L+ C
}
: }) H& z- J0 a9 M2 Uint main(void)7 b& J& p% i8 N. Z; B3 u* l& _, f
{
, e& b" U8 @" r# {* }- s    int a =5;. B1 d% ]" j, a/ `  @2 ?
    int b =6;
/ I* o6 ]% l7 c- {2 k' G, o0 L# O, r  b    printf("a=%d,b=%d\n",a,b);
7 y/ e: I+ _( _4 k; ?    swap(a,b);6 n" o$ A+ z, e4 S
. s* z- Z# Q' ^6 F. d1 U
    printf("a=%d,b=%d\n",a,b);. w& Z# T  r# X2 Q
' r4 |& [4 n/ B- @! G+ L: a3 T4 _
    return 0;
$ Y, J' _1 q3 b" I9 e: d: U+ ~4 g- x3 L
}- u/ _8 p2 r: I( w& M

8 R/ k0 I% }! M2 T
演示结果:
root@txp:/home/txp# ./a.out, `- p7 y1 {! ?5 N/ D
a=5,b=6# R  d" i; Q; e8 S; M% `4 ]% I
a=6,b=58 i+ u' s& ?5 |% _, B" Z2 A
+ B1 H  `2 T$ n5 T' o2 g, o  n2 s
(2)指针方式:
#include <stdio.h>1 a8 k/ i2 G9 z$ I, E+ G( d0 [
. F& p3 P; x5 d( n% E: g
void swap(int *a,int *b). r+ c. p4 \9 I& n+ z
{
9 T0 H3 y1 d0 P$ p/ [   int t =*a;- z# U8 }# ^. @( b) P
   *a=*b;7 n# Q- K! f# ]$ y# p- R
   *b=t;! y1 f  v, x4 ]) R; s$ L1 s
}7 _( g4 n% Z9 X# d3 F
int main(void)
) Z. N; W" ?5 I% A. W& |{! U2 \/ v( u. i, @, X
    int a =5;
, p) M1 c) U" M    int b =6;
) ~! u8 H+ M* ~5 s- k2 T* G    printf("a=%d,b=%d\n",a,b);4 ^- ]8 M3 E# E! m
    swap(&a,&b);
( R7 \0 U. o* K4 ~9 `: d
: L7 k& k, D0 g    printf("a=%d,b=%d\n",a,b);
6 L$ X$ ?2 B3 @9 D$ N
% I3 s6 r6 O. X. l) y0 D2 ~7 O  l1 \    return 0;6 ]& J. g% o8 v
& A6 n& Y- b: O
}
7 q; e3 C) i: g, G

5 k) d3 c' J4 w2 h1 T
演示结果:
root@txp:/home/txp# ./a.out
0 O% T" ~0 j4 k. f  Wa=5,b=67 P) g& ~4 [! V' [, T4 V1 l& \
a=6,b=52 }0 {' c& G& a2 h1 Z2 Q
" O/ }- ?7 K1 ^$ M+ d- k9 f
3、特殊的引用:
--在c++中可以声明const引用。
--const Type& name =var;
--const 引用让变量拥有只读属性。
--当使用常量对const引用进行初始化时,C++编译器会为常量分配空间,并将引用名作为这段空间的别名:
int a = 4;
+ G. w+ R  T: Kconst int& b =a;
7 D! L! Z! b" ^7 Z; eint *p=(int *)&b;, r9 F! Q" y2 G; Q) S7 x
b=5;//错误,只读变量
: @* T0 Z% x: @, q& U2 `# V*p=5;//修改a的值
. }& G. ]1 \" ~: B: a' [! t
下面来看一个示例:
#include <stdio.h>- n" W0 T" T6 _4 ]: j6 g% F

9 E% x6 T3 d. Xvoid Example()" b/ w0 L& J7 \: e5 ]$ A, s
{, q5 C* Y5 A2 X" `- Z& K! V9 P: z  J) K
    printf("Example:\n");
5 H0 \; x/ r4 s* Z2 }& k1 A3 R   
6 y5 q: e, F0 \9 }$ |- |; R1 Q    int a = 4;
( R  g! j* u- W7 [    const int& b = a;
: L# Q) M- T; n6 F    int* p = (int*)&b;
: l9 R- L" }" _5 x& M3 F   
. t( A2 W* G$ |0 c4 J7 L# e% N; Q    //b = 5;7 Z% s* a% _6 I7 H
    8 X. L3 k* F! @/ ]' d, o3 B
    *p = 5;
+ G  ?! W$ H3 v# K* O    9 n# [8 u1 Z& M$ x! C6 Z
    printf("a = %d\n", a);
" k! P- J8 T" j/ E    printf("b = %d\n", b);% R( D. w0 Q$ z( N/ x4 ~
}( a+ x3 B' Q5 }& b

+ K3 x- H! n7 o* G+ A. h+ o
, e' q) h# o* d; j1 K+ y( K. i1 W3 @4 y
int main(int argc, char *argv[])
2 N6 h1 z' C1 m& t6 o7 o% {3 D{/ N, s# @  I% ~: W  u
    Example();& J* x! }  _0 ~) ^! T
    " ^# q" }! d' X+ f
    printf("\n");
9 s" a/ u# ~" ?   
4 ?% A( w: G. V' e( }2 A' Z  
: p/ m+ W8 S* T9 f    return 0;' J& _* S( I9 Q  ~" e5 o
}
5 C' B2 j- t2 O2 T7 |) r
9 X2 N* Z  f( l; w7 `% ?7 m% W
演示结果:
root@txp:/home/txp# ./a.out' a) l* g$ P* @+ |5 U& k- H
Example:
& @* [# X; d* }! ha = 5
8 {% U, Y! f0 X! U" a" Q- pb = 59 ?+ r% N. y9 U6 h  _) ?' b
+ }4 [' F! v; w+ o) R$ w+ q: s
4、引用有自己的存储空间吗?
话不多说,看试验就知晓:
#include <stdio.h>4 T9 t& x9 a8 l: z. Y0 _8 k: @
5 w) g. [( `  x4 K* Y) f
struct TRef% y$ b" p; p$ N0 E6 ~5 E$ l: ^
{
3 \: n- Y5 z, j. u9 o: l3 W* l    char& r;$ [" n$ H' C3 U' |% v
};; s2 f0 o, S  @# _! [5 v2 _( z
$ m9 z! X  {8 |( b: i3 {
int main(int argc, char *argv[]): _4 [' W/ ]. j3 p4 V4 v0 q
{ % p. h) S0 U& N7 d
    char c = 'c';
: f6 x; v  f$ O    char& rc = c;
# b3 Z  i# ^2 c    TRef ref = { c };2 a; R6 l* \5 U# }( f% Q
   
3 _8 b2 h% J, p1 O    printf("sizeof(char&) = %d\n", sizeof(char&));
; G1 W. Q  g! H+ v4 x5 y( u# X    printf("sizeof(rc) = %d\n", sizeof(rc));& ?/ ^* V! W8 I8 L
    ) b, S2 Q+ A6 x, ?% }6 X2 {
    printf("sizeof(TRef) = %d\n", sizeof(TRef));
. Q1 [3 M$ Q' c% P5 g6 N( J! l    printf("sizeof(ref.r) = %d\n", sizeof(ref.r));
8 l5 g( [6 c( A: Q, T$ d. D& E8 z7 K3 l1 k3 r# _- c9 `% r+ _/ W
    return 0;0 U# X+ U* v4 M
}# @# X! r5 q+ D' p

  P# |4 s5 \0 P; Q0 _! f
演示结果:
root@txp:/home/txp# ./a.out+ U; C4 a' Y" a1 q) W: s
sizeof(char&) = 1
/ {# w  P1 ~. _: [4 u) y4 rsizeof(rc) = 1! m4 E$ J' h* N; C
sizeof(TRef) = 8
* q; b& [) |) ^& asizeof(ref.r) = 1
$ \  Y* o. s/ x' @% I
很明显有它的内存大小,下面就来看一下引用的本质。
5、引用的本质:
(1)引用在c++中的内部实现是一个指针常量,比如说说:
Type& name; : s: t6 ^- w2 W; J9 S

  _; D1 |* |- P. @5 u$ P( c9 ovoid fun(int& a)# @# c* Q: X0 D$ o5 o# l6 h9 Y
{
9 A. G7 t1 w. y% i) F2 a  a=8;* s% N6 \9 f1 w0 g( ~6 G
}
- ]/ n, O5 `! `2 V2 I

" m0 m! w* v' I9 J5 ~5 b
等价于:
Type* const name
2 Y: z5 p5 k* y& ^4 t7 ]1 F2 r4 `
void fun(int* const a)) n5 o1 l5 M. B  D/ G" W% \/ w
{& y- o' d3 [1 m2 \4 J
  *a=8;
6 ?5 M  e" n* y2 u* t}

  ~/ U1 [' R' M
(2)C++编译器在编译过程中用指针变量作为引用的内部实现,因此引用所占用的空间大小与指针相同(可以结合上面的那个例子仔细回忆和理解一下)。
(3)从使用的角度,引用只是一个别名,c++为了实用性而隐藏了引用的存储空间这一细节。
(4)c++中的引用大多数的情况下代替指针:
--功能性:可以满足多数需要使用指针的场合。
--安全性:可以避免由于指针操作不当而带来的内存错误。
--操作性:简单易用,又不失功能强大。
#include <stdio.h>
& F- }  B  [" G, F# {( ^4 r, C; N6 R$ N3 X& g# {$ E
struct TRef
1 r3 q3 N% k) z# \8 ]5 T' Q( `{
0 ?0 g1 o. d7 q. l9 o    char* before;
8 R3 J# n4 M- S$ L$ [    char& ref;& R  v" K0 d+ V( `- d& p4 ?, [: C
    char* after;
4 p! \' ~' i, s( L; U};
. \) ^7 R8 O4 t; D3 B9 \
- \2 {3 X8 u" Z! Y( K% h8 o" Dint main(int argc, char* argv[])
7 X( @) B( k0 t% V& C+ }& T{
( B* r% o# O) w, E2 M' ~9 B. x6 q    char a = 'a';
% c$ j. y. @# F; ~6 v8 C9 ~    char& b = a;0 x+ h! r' O, L7 o0 B2 E8 w' Q
    char c = 'c';
) }. @6 H' ?8 Q5 H
! C1 K( I4 a! t6 @# S    TRef r = {&a, b, &c};
4 Q  o0 ]; c! ^: x; O7 ^" t4 w0 s
! U4 }0 D+ v2 Q; k    printf("sizeof(r) = %d\n", sizeof(r));8 ^  \- e& N9 _" n6 l1 k
    printf("sizeof(r.before) = %d\n", sizeof(r.before));8 q# o  C7 v3 J& y
    printf("sizeof(r.after) = %d\n", sizeof(r.after));) G8 u/ P: u' u. x* o% g) Y0 [9 Z
    printf("&r.before = %p\n", &r.before);, G! F" P5 {9 L
    printf("&r.after = %p\n", &r.after);5 n% w  N/ M$ ]2 j9 ?" p
8 [6 Z; M& J/ t" O+ A4 ?3 U
    return 0;+ X5 Y; r- D0 {6 T% B
}6 }) K" ~2 i9 P0 m. S4 g% d
6 q$ _8 ?* T, Y9 D& g" F2 o1 f- i
演示结果:
@txp:/home/txp# ./a.out
1 R& r" J% X/ y5 |0 jsizeof(r) = 24
+ T: n1 S9 N" H$ Osizeof(r.before) = 8" d) P: ~% k& ~6 W4 ?  ^
sizeof(r.after) = 8
2 M6 U% |5 K5 W6 E1 Y&r.before = 0x7ffdeacc7a00  a- w* L$ T6 }
&r.after = 0x7ffdeacc7a10
/ z4 w0 l+ K2 m. D% U8 h

1 Z1 N! O  w: q( Y/ t
再来看一个函数返回引用示例:
#include <stdio.h>) [# u7 y. ?- d; l

) g4 p) k- r. i+ `. w+ H9 Xint& func()
. b  [: }- ]( N2 y2 l3 r{4 [- e3 X5 c+ r9 j0 R5 @* J
    static int s = 0;9 B) j! r0 P9 C
   
; G9 D2 C+ B  n+ \+ |    printf("func: s = %d\n", s);7 L/ D! V+ }' i0 y( o! [* g
   
7 B4 e7 X; B( b7 a& a! u    return s;+ R8 Z9 _# K0 @; C
}
0 i0 F: T$ G' a6 M- Y, u$ _0 J% j8 E
int main(int argc, char* argv[])" f5 T& z5 g5 w1 @6 k2 N
{
0 Z2 X0 u+ D6 ?# p  m9 H4 b$ T# a    2 G$ F5 i8 h" @/ d' f4 K
    int& rs = func();' H1 G1 ?, l5 a' a0 W
    1 ~6 n6 |9 Z) k9 @
    printf("\n");
3 V% l6 P5 X& N* b3 v+ [, f" J    printf("main: rs = %d\n", rs);
/ }- s- @, N3 P: ]5 @    printf("\n");
7 G5 z5 S& \- ]0 s9 B# O  
8 |+ h$ G+ C% T1 N7 j    rs = 11;
4 n" g5 P1 q9 X& ^9 y& P( T5 S    ) E  h3 x' T$ H# W/ T
   7 f: I0 k" e2 p$ T6 n; J! \# a( Y, \
    func();1 ?  a7 ]! ]' \
   
/ `/ H: ]1 `! z% a2 C    printf("\n");
! O' v& L1 Q# H- e   2 m+ ^1 Z+ {) w: f% O, M
    printf("main: rs = %d\n", rs);2 f# m: i/ V' X3 H% i& s, Z3 n' U# I$ m
    printf("\n");
1 `( ~9 i2 n% d5 \: Z7 C3 S( Y    , u" ^7 S3 d; v% M3 D) [' \
    return 0;
/ ~! S2 ]+ J) p9 k" x: z}. n" z. m' u, d8 k7 b
8 E" X4 Z9 s6 @1 M6 e$ r
演示结果:
root@txp:/home/txp# ./a.out5 n. \& T+ J' ^3 ]4 V' i
func: s = 0( d. Z2 A% M6 M! Z4 \

& v0 N) _, S8 z; |main: rs = 0
. k+ s& ?- j! I5 P1 k0 l0 c9 _( x; Q, }) T5 f
func: s = 112 s& a, l( Z( {  V7 e

+ [, G5 l/ a" V* V) omain: rs = 11) {& I3 F# w6 S5 ^9 ~3 |& s

- A) T( }0 B" M( d
三、总结:
1、bool的总结:
--bool类型是c++新添加的基础类型。
--bool类型的值只能是true和false。
--c++中的三目运算符可作为左值来使用。
2、引用:
--引用作为变量名而存在旨在代替指针。
--const引用可以使得变量具有可读属性。
--引用在编译器内部使用指针常量实现。
--引用的最终本质为指针。
--引用可以尽可能的避免内存错误。
赞 收藏 评论2 发布时间:2020-6-22 20:50

举报

2个回答
desk1983 回答时间:2020-6-22 23:08:10
非常好的资料,对初学者很有帮助;( a9 b5 }  y' c3 S- [9 \
希望楼主多多分享,赠人玫瑰,手有余香,念念不忘,必有回响;.
李康1202 回答时间:2020-6-23 08:49:27
顶一下
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版