C++ 指针中(星号)的确切用途是什么?
我对编程还不熟悉,我正试着用“指针”来概括我的想法C++ 指针中(星号)的确切用途是什么?,c++,pointers,memory-address,dereference,C++,Pointers,Memory Address,Dereference,我对编程还不熟悉,我正试着用“指针”来概括我的想法 intmain() { int x=5; int*指针指针指针=&x; cout*根据上下文有不同的含义 指针的声明 int* ap; // It defines ap to be a pointer to an int. void foo(int* p); // Declares function foo. // foo expects a pointer to an int as an argume
intmain()
{
int x=5;
int*指针指针指针=&x;
cout*
根据上下文有不同的含义
指针的声明
int* ap; // It defines ap to be a pointer to an int.
void foo(int* p); // Declares function foo.
// foo expects a pointer to an int as an argument.
取消引用表达式中的指针
int i = 0;
int* ap = &i; // ap points to i
*ap = 10; // Indirectly sets the value of i to 10
乘法运算符
int i = 10*20; // Needs no explanation.
如果声明某种类型的变量,则还可以声明指向它的另一个变量
例如:
int a;
int*b=&a;
所以本质上,对于每个基本类型,我们也有相应的指针类型
例如:short
和short*
有两种方法可以“查看”变量b
(这可能会让大多数初学者感到困惑):
>p>可以考虑<代码> b>代码>作为变量<代码> int *>代码> < < /p>
>p>可以考虑<代码> *b/COD>作为类型<代码> int >的变量。
因此,有些人会声明int*b
,而有些人会声明int*b
但事实是,这两个声明是相同的(空格是没有意义的)
您可以使用b
作为指向整数值的指针,也可以使用*b
作为实际指向的整数值
您可以获取(读取)指向的值:int c=*b
您可以设置(写入)指定值:*b=5
指针可以指向任何内存地址,而不仅仅指向您之前声明的某个变量的地址。但是,在使用指针获取或设置位于所指向内存地址的值时,必须小心
例如:
int*a=(int*)0x8000000;
这里,变量a
指向内存地址0x8000000
如果此内存地址未映射到程序的内存空间中,则使用*a
的任何读写操作都极有可能导致程序因内存访问冲突而崩溃
您可以安全地更改a
的值,但是更改*a
的值时应该非常小心,一种方法是查看它,即源代码中的变量,例如
int a=0;
使“int a”引用内存中的一个值0。如果我们创建一个新变量,这一次是一个(可能更小的)“int指针”int*
,并让它指向&a(a的地址)
我们得到了p_a
,它指向&a
的值。你现在谈论的a
的地址是什么,而*p_a是指向&a(a的地址)的指针
当您想要修改内存中的值而不创建重复的容器时,这有其用途
p_a
本身在内存中有一个内存占用空间(可能小于a
本身),当您cout是时,星号*
在声明指针变量和通过指针变量访问数据时具有不同的含义
int input = 7;
int *i_ptr = &input;/*Here * indicates that i_ptr is a pointer variable
Also address is assigned to i_ptr, not to *iptr*/
cout<<*i_ptr;/* now this * is fetch the data from assigned address */
cout<<i_ptr;/*it prints address */
int输入=7;
int*i_ptr=&input;/*Here*表示i_ptr是指针变量
地址也分配给i_ptr,而不是*iptr*/
coutOne是指针(即内存地址)-这是十六进制值。另一个是该地址的内容。*
指针前面表示“取消引用”指针,或遍历它。*
类型后表示指向该类型的指针。指针只是指向内存中某个存储给定信息的地方的方向。int*ap
和int*ap
之间是否有区别(样式除外)?@c.berger,不,没有。
int*p_a=&a; //(`p_a` meaning pointer to `a` see Hungarian notation)
int input = 7;
int *i_ptr = &input;/*Here * indicates that i_ptr is a pointer variable
Also address is assigned to i_ptr, not to *iptr*/
cout<<*i_ptr;/* now this * is fetch the data from assigned address */
cout<<i_ptr;/*it prints address */