我总是搞砸了怎么用const int*,const int * const和int const *正确的.是否有一套规则来定义您能做什么和不能做什么?
我想知道在任务,传递到职能等方面所做的所有事情和所有不应做的事情.
有什么区别:
char * const
Run Code Online (Sandbox Code Playgroud)
和
const char *
Run Code Online (Sandbox Code Playgroud) 以下声明之间有什么区别?
char * const a;
const char * a;
Run Code Online (Sandbox Code Playgroud)
为了理解我写这个小程序的区别:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
char a = 'x';
char b = 'y';
char * const pc1 = &a;
const char * pc2 = &a;
printf ("Before\n");
printf ("pc1=%p\n", pc1);
printf ("*pc1=%c\n", *pc1);
printf ("pc2=%p\n", pc2);
printf ("*pc2=%c\n", *pc2);
*pc1 = b;
/* pc1 = &b; */
/* *pc2 = b; */
pc2 = &b;
printf ("\n\n");
printf ("After\n");
printf ("pc1=%p\n", pc1);
printf ("*pc1=%c\n", …Run Code Online (Sandbox Code Playgroud) 这是我在Rust文档中看到的两个函数签名:
fn modify_foo(mut foo: Box<i32>) { *foo += 1; *foo }
fn modify_foo(foo: &mut i32) { *foo += 1; *foo }
Run Code Online (Sandbox Code Playgroud)
为什么不同的位置mut?
似乎第一个函数也可以声明为
fn modify_foo(foo: mut Box<i32>) { /* ... */ }
Run Code Online (Sandbox Code Playgroud) 为什么 std::unique_ptr 的 'operator*' 成员函数可以标记为 const ( https://en.cppreference.com/w/cpp/memory/unique_ptr/operator *) 而像 'front()'、 'back( std::vector 中的 )'、'operator[]' 等未标记为 const?两者都返回对其管理的资源的非常量引用。
核心问题是我无法理解第一部分,即为什么我们能够将“operator*”标记为 const,即当该函数中的“*this”指针是 const 时,返回类型如何为“T&”指针(由于函数被标记为 const)?
我有一个需要指针的函数,但我不小心将它声明为 const。该函数(故意)更改指针值 - 实际指针而不是指针指向的数据。
我想知道为什么这不会产生警告......
static void CalcCRC(const uint32_t *pData, uint8_t noWords)
{
// Do some other stuff....
pData = pData + noWords;
// Do some other stuff....
}
Run Code Online (Sandbox Code Playgroud)