打印指针地址%d和%u打印时有什么区别?
例如:
int a = 5;
// check the memory address
printf("memory address = %d\n", &a); // prints "memory address = -12"
printf("memory address = %u\n", &a); // prints "memory address = 65456"
Run Code Online (Sandbox Code Playgroud) 如果p->m仅仅是语法糖是不是有意义(*p).m?基本上,operator->我写过的每一个都可以实现如下:
Foo::Foo* operator->()
{
return &**this;
}
Run Code Online (Sandbox Code Playgroud)
在任何情况下,我想要p->m的意思是什么(*p).m?
我想调用一个函数,我希望该函数将程序中字符串或数组的内容更改为常量.
伪代码:
some_array = "hello"
print some_array #prints "hello"
changeArray(some_array)
print some_array #prints "bingo"
Run Code Online (Sandbox Code Playgroud)
我知道我必须将指针传递给该函数.这是我写的,
void changeArray(char *arr){
arr = "bingo";
}
int main(int argc, const char* argv[]){
char *blah = "hello";
printf("Array is %s\n",blah);
changeArray(blah);
printf("Array is %s\n",blah);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有以下结构:
typedef struct _chess {
int **array;
int size;
struct _chess *parent;
} chess;
Run Code Online (Sandbox Code Playgroud)
我有:
typedef struct _chess *Chess;
Run Code Online (Sandbox Code Playgroud)
现在,我想创建一个动态长度数组来存储指向ARCH结构的指针,所以我执行以下操作:
Chess array [] = malloc(size * sizeof(Chess));
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:初始化程序无效.
如果我放弃[]并执行此操作:
Chess array = malloc(size * sizeof(Chess));
Run Code Online (Sandbox Code Playgroud)
它编译没有错误,但当我尝试通过执行以下操作将此数组的元素设置为NULL:
array[i]=NULL;
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:从类型'void*'分配类型'struct _chess'时出现不兼容的类型
知道我做错了什么吗?谢谢.
有没有什么办法可以将const关键字添加到作为参数传递的数组中来运行:
void foo(char arr_arg[])
Run Code Online (Sandbox Code Playgroud)
如果我放在()const之前或之后(),那将意味着它不是常数,而不是.charvoid foo(const char arr_arg[])charvoid foo(char const arr_arg[])chararr_arg
我刚刚读到,在引擎盖下,作为参数发送的数组被表示为指针,因此void foo(char arr_arg[])也是如此void foo(char* ptr_arg).考虑到这一点,我可能会重写函数,void foo(char * const ptr_arg)因为它正是我想要实现的.
但是我想知道是否有一种方法可以const在此声明中添加关键字,void foo(char arr_arg[])使其与void foo(char * const ptr_arg)(而不是 void foo(char const * ptr_arg)或void foo(const char * ptr_arg))相同?
我只是想了解是否存在arr_arg使用数组表示法使常量变为常量的语法[].
我正在尝试使用std::shared_ptr和处理对象std::weak_ptr.场景是这样的:
我有一个类的对象,channel它派生自一个抽象类abstract::channel(使用纯虚函数).我有一个容器channelContainer(std::vector)包含对象的共享指针(std::shared_ptr)channel.
现在,我有一个deque (std::deque)包含弱指针(std::weak_ptr)的每个对象channelContainer.让我们说出这个双端队列freeChannelQueue.
所以我们说:
std::vector<std::shared_ptr<abstract::channel> > channelContainer;
std::deque<std::weak_ptr<abstract::channel > > freeChannelQueue;
//Assuming that both the containers are filled appropriately How do I go about implementeing the below functions?
abstract::channel& get_free_channel() {
//This should return a free channel object from 'freeChannelQueue' and pop the queue.
}
bool release_channel(abstract::channel& ch) {
//This should convert 'ch' to a …Run Code Online (Sandbox Code Playgroud) 据我所知,在以下行中,我们尝试写入无效的内存位置.但这实际上也是一个未对齐的指针.有人可以解释什么是未对齐的指针,以及下面的未对齐指针是什么?
*(int*)0xffffffff = 0xbad;
Run Code Online (Sandbox Code Playgroud) 确实delete[] a,在那里a被指针的动态分配的数组,执行delete对于在阵列中的每个指针?
我想,它为具有用户定义类的数组执行析构函数,但是指针发生了什么?
我正在寻找一个函数来确定给定的指针是否指向给定的缓冲区.规格:
template <typename T>
bool points_into_buffer (T *p, T *buf, std::size_t len);
Run Code Online (Sandbox Code Playgroud)
如果有一些n,0 <= n && n < len为这p == buf + n,退货true.
否则,如果有一些n,0 <= n && n < len * sizeof(T)为它reinterpret_cast<char *>(p) == reinterpret_cast<char *>(buf) + n的行为是不确定的.
否则,返回false.
明显的实现看起来像
template <typename T>
bool points_into_buffer (T *p, T *buf, std::size_t len) {
return p >= buf && p < buf + len;
}
Run Code Online (Sandbox Code Playgroud)
但是在标准C++中有未定义的行为:指针的关系比较仅针对指向同一数组的指针定义. …
我试图理解字符串,数组和指针之间的关系.
我正在阅读的这本书有一个程序,它在其中初始化变量如下:
char* szString= "Name";
Run Code Online (Sandbox Code Playgroud)
我理解这一点的方式是,C风格的字符串只是一个字符数组.数组只是引用指针(存储数组的第一个值)和偏移量的简写版本.即
array[5]实际上返回从表达式计算的内容*(array+5).
因此,根据我的理解和测试,szString实际上被初始化为指向存储"Name"的数组的第一个地址的指针.我可以推断出这个因为输出到:
cout << *szstring;
Run Code Online (Sandbox Code Playgroud)
是字符"N".
我对声明的理解
cout << szstring;
Run Code Online (Sandbox Code Playgroud)
输出字符"Name",方法cout将参数szstring解释为字符串类型,并打印出所有字符,直到NUL字符.另一方面,对于参数*szstring,使用支持C样式字符串的此方法的不同版本.
因此,如果我可以初始化一个char类型指针来寻址一个chars数组中的第一个元素(一个C风格的字符串),为什么我不能初始化一个整数数组中第一个元素的int类型指针,如下所示:
int* intArray = {1,2,3};
Run Code Online (Sandbox Code Playgroud)